当前位置: 首页 > news >正文

Educational Codeforces Round 171 (Rated for Div. 2)(A~D) 题解

Problem - A - Codeforces--PerpendicularSegments

思路:正方形对角线最长,并且相互垂直.直接输出即可.

int x,y,k;
void solve(){       //Acin>>x>>y>>k;int res=min(x,y);cout<<"0 0"<<" "<<res<<" "<<res<<endl;cout<<"0 "<<res<<" "<<res<<" 0"<<endl;
}

Problem - B - Codeforces--BlaceCells

思路:读错题了..简单贪心,偶数个直接算即可;奇数个枚举哪一个不要,然后再相邻两两配对即可。

int n;
//读错题了cao,爽扣80分.
//https://codeforces.com/contest/2026/problem/B
void solve(){     //Bcin>>n;vector<int> vct;for(int i=1;i<=n;i++){int x; cin>>x;vct.emplace_back(x);}int ans=LONG_LONG_MAX,fuck=1;       //LONG_LONG_MAX!!if(n%2==0) {for(int i=1;i<(int)vct.size();i+=2) {  //wrong:i+=2!!fuck=max(fuck,vct[i]-vct[i-1]);}cout<<fuck<<endl;}else{for(int i=0;i<(int)vct.size();i++){vector<int> temp;for(int j=0;j<(int)vct.size();j++){if(i==j) continue;temp.emplace_back(vct[j]);}int res=1;for(int j=1;j<(int)temp.size();j+=2) res=max(res,temp[j]-temp[j-1]); //wrong:j+=2!!ans=min(ans,res);}cout<<ans<<endl;}
}

Problem - C - Codeforces--ActionFigures

思路:仍然是简单贪心,从后往前贪即可。把0和1分开存,优先使用0(注意把无效的弹出),没有0了就最优先弹出最前面的1。用双端队列即可。

int n;
string str;
从后往前贪心,秒了
void solve(){       //Ccin>>n>>str;str="?"+str;deque<int> zero,one;for(int i=1;i<=n;i++) str[i]=='0'?zero.emplace_back(i):one.emplace_back(i);int ans=n*(1+n)/2;while(!one.empty()){int cur=one.back();one.pop_back();while(!zero.empty()&&zero.back()>cur) zero.pop_back();if(!zero.empty()) zero.pop_back(),ans-=cur;else if(!one.empty()) one.pop_front(),ans-=cur;}cout<<ans<<endl;
}

Problem - D - Codeforces--SumsOfSegments

思路:不知不觉推了一天..推导这方面还是太晕了..

题解:我们必须能够计算以下值:
①给定数据块b的一个索引,以及该数据块中元素l和r的索引,计算从该数据块中第l个元素到第r个元素的和;
这个是最核心的功能,看下面例子..
②给定图块l和r的两个索引,计算从图块l到图块r的和; 可以o(1)实现.整出pre3即可,这个很好推导.
题解:key:b数组分块处理,以第i个数字开头到n的为一块,共有n块.
那么可以记录每一块的长度和总和.然后可以维护全部块的前缀和.
可以o(logn)算出l,r在哪一块中,那么ans=(pre3[idxR]-pre3[idxL-1]) 减 (l块和r块中选上的数字的和);
以arr=1,2,5,10; 为例.
pre1:1,3,8,18; arr数组的前缀和.
pre2:1,4,12,30; 原数组的前缀和的前缀和.
key!!!!:
但是怎么求任意块内任意区间和???究极核心推导如下:
b为所求区间[l,r]所在的块编号(从1开始编号).
那么对应原数组,计算[l,r]所在的区间贡献为:pre1[b+l-1]+pre1[b+l]+pre1[b+l+1]+pre1[b+r] - (r-l+1)pre1[b-1];
即在求pre1的区间和,直接用pre2即可!!,那么任意块b区间[l,r]的和为:
pre2[b+r-1]-pre2[b+l-1]-(r-l+1)*pre1[b-1];
key!!!:一切的一切,都衍生于原数组,下标都是换成跟原数组对应的,这样就可以使用原数组衍生的各个前缀和.
pre3:30,56,76,86; 每一块的总和的前缀和.
每一块的总和:30,26(30-4*1),20(30-4*1-3*2),10(30-4*1-3*2-2*5);
//题解:我们必须能够计算以下值:
//①给定数据块b的一个索引,以及该数据块中元素l和r的索引,计算从该数据块中第l个元素到第r个元素的和;
//这个是最核心的功能,看下面例子..
//②给定图块l和r的两个索引,计算从图块l到图块r的和; 可以o(1)实现.整出pre3即可,这个很好推导.
int n,q;
int arr[300005];
int pre1[300005];
int pre2[300005];
int pre3[300005];
int getBlock(int pos){    //二分出pos在哪个block.int l=1,r=n,res=-1;while(l<=r){int mid=(l+r)>>1;if( mid*(n+n-mid+1)/2 < pos ){res=mid-1;l=mid+1;}else r=mid-1;}return res;
}
//完整的b数组很大,大概9e10.
//ai的范围很小,只有[-10,10],但是有什么用呢?--没有什么用,只是总和不会爆long long
//不懂...
//看题解:key:b数组分块处理,以第i个数字开头到n的为一块,共有n块.
//那么可以记录每一块的长度和总和.然后可以维护全部块的前缀和.
//可以o(logn)算出l,r在哪一块中,那么ans=(pre3[idxR]-pre3[idxL-1]) 减 (l块和r块中选上的数字的和);//以arr=1,2,5,10; 为例.
//pre1:1,3,8,18; arr数组的前缀和.
//pre2:1,4,12,30; 原数组的前缀和的前缀和.
key!!!!:
但是怎么求任意块内任意区间和???究极核心推导如下:
b为所求区间[l,r]所在的块编号(从1开始编号).
那么对应原数组,计算[l,r]所在的区间贡献为:pre1[b+l-1]+pre1[b+l]+pre1[b+l+1]+pre1[b+r] - (r-l+1)pre1[b-1];
即在求pre1的区间和,直接用pre2即可!!,那么任意块b区间[l,r]的和为:
pre2[b+r-1]-pre2[b+l-1]-(r-l+1)*pre1[b-1];
key!!!:一切的一切,都衍生于原数组,下标都是换成跟原数组对应的,这样就可以使用原数组衍生的各个前缀和.
//pre3:30,56,76,86; 每一块的总和的前缀和.
//每一块的总和:30,26(30-4*1),20(30-4*1-3*2),10(30-4*1-3*2-2*5);
//https://codeforces.com/contest/2026/problem/D
void solve(){       //补D 分块,,细细推导...下标对应好...细节多多啊..给写了一天。。cin>>n;for(int i=1;i<=n;i++) {cin>>arr[i];pre1[i]=pre1[i-1]+arr[i];pre2[i]=pre2[i-1]+pre1[i];}int sum=pre2[n];for(int i=1;i<=n;i++){pre3[i]=pre3[i-1]+sum;sum-=(n-i+1)*arr[i];}cin>>q;while(q--){int x,y; cin>>x>>y;int bl=getBlock(x)+1,br=getBlock(y)+1;int posl=x-(bl*(n+n-bl+1)/2); //在块内的位置posl.int posr=y-(br*(n+n-br+1)/2); //在块内的位置posr.bl++,br++;if(bl==br){ cout<<pre2[bl+posr-1]-pre2[bl+posl-1-1]-(posr-posl+1)*pre1[bl-1]<<endl; }else{int resL=pre2[bl+(n-bl+1)-1]-pre2[bl+posl-1-1]-( (n-bl+1)-posl+1 )*pre1[bl-1];int resMid=pre3[br-1]-pre3[bl];int resR=pre2[br+posr-1]-pre2[br-1]-posr*pre1[br-1];cout<<resL+resMid+resR<<endl;}}
}

相关文章:

Educational Codeforces Round 171 (Rated for Div. 2)(A~D) 题解

Problem - A - Codeforces--PerpendicularSegments 思路:正方形对角线最长,并且相互垂直.直接输出即可. int x,y,k; void solve(){ //Acin>>x>>y>>k;int resmin(x,y);cout<<"0 0"<<" "<<res<<" &q…...

【教程】Git 标准工作流

目录 前言建仓&#xff0c;拉仓&#xff0c;关联仓库修改代码更新本地仓库&#xff0c;并解决冲突提交代码&#xff0c;合入代码其他常用 Git 工作流删除本地仓库和远程仓库中的文件日志打印commit 相关 前言 Git 是日常开发中常用的版本控制工具&#xff0c;配合代码托管仓库…...

Nico,从零开始干掉Appium,移动端自动化测试框架实现

开头先让我碎碎念一波~去年差不多时间发布了一篇《 UiAutomator Nico&#xff0c;一个基于纯 adb 命令实现的安卓自动化测试框》&#xff08;https://testerhome.com/topics/37042&#xff09;&#xff0c; 由于种种原因 (详见此篇帖子) 当时选择了用纯 adb 命令来实现安卓自动…...

PHP合成图片,生成海报图,poster-editor使用说明

之前写过一篇使用Grafika插件生成海报图的文章&#xff0c;但是当我再次使用时&#xff0c;却发生了错误&#xff0c;回看Grafika文档&#xff0c;发现很久没更新了&#xff0c;不兼容新版的GD&#xff0c;所以改用了intervention/image插件来生成海报图。 但是后来需要对海报…...

微信小程序 - 数组 push / unshift 追加后数组返回内容为数字(数组添加后打印结果为 Number 数值类型)

前言 假设一个空数组,通过 push 方法追加了一个项,控制台打印的结果竟然是 Number 数值。 例如,以下微信小程序代码: // 源数组 var arr = [] // 追加数据 var tem = arr.push(数据)...

1、DevEco Studio 鸿蒙仓颉应用创建

1. 仓颉鸿蒙应用简介 因为仓颉是静态编译型语言&#xff0c;使用仓颉开发的应用执行效率更高。而且主打全场景&#xff0c;后续可并入仓颉生态&#xff0c;其和ArkTS都是基于ArkUI进行开发&#xff0c;最大的区别是typescript和仓颉语法间的差异。 2. 应用创建 前置条件&…...

从头开始学PHP之面向对象

首先介绍下最近情况&#xff0c;因为最近入职了且通勤距离较远&#xff0c;导致精力不够了&#xff0c;而且我发现&#xff0c;人一旦上了班&#xff0c;下班之后就不想再进行任何脑力劳动了&#xff08;对大部分牛马来说&#xff0c;精英除外&#xff09;。 话不多说进入今天的…...

C++ | Leetcode C++题解之第519题随机翻转矩阵

题目&#xff1a; 题解&#xff1a; class Solution { public:Solution(int m, int n) {this->m m;this->n n;this->total m * n;srand(time(nullptr));}vector<int> flip() {int x rand() % total;vector<int> ans;total--; // 查找位置 x 对应的…...

vrrp和mstp区别

思路 vrrp是用来虚拟网关&#xff0c;噢&#xff0c;是虚拟一条虚拟网关 优先级&#xff0c;priority越大越优先&#xff0c;优先级相同&#xff0c;哪个的路由器的vrrp先起来&#xff0c;谁就是主 mstp是快速生成树协议&#xff0c;防止环路用的 优先级越小越优先 华为命令…...

前端页面整屏滚动fullpage.js简单使用

官网CSS,JS地址 fullPage.js/dist/fullpage.min.js at master alvarotrigo/fullPage.js GitHub fullPage.js/dist/fullpage.min.css at master alvarotrigo/fullPage.js GitHub <!DOCTYPE html> <html lang"en"><head><meta charset"…...

JQuery基本介绍和使用方法

JQuery基本介绍和使用方法 W3C 标准给我们提供了⼀系列的函数, 让我们可以操作: ⽹⻚内容⽹⻚结构⽹⻚样式 但是原⽣的JavaScript提供的API操作DOM元素时, 代码⽐较繁琐, 冗⻓. 我们可以使⽤JQuery来操作⻚⾯对象. jQuery是⼀个快速、简洁且功能丰富的JavaScript框架, 于20…...

【案例】旗帜飘动

开发平台&#xff1a;Unity 6.0 开发工具&#xff1a;Shader Graph 参考视频&#xff1a;Unity Shader Graph 旗帜飘动特效   一、效果图 二、Shader Graph 路线图 三、案例分析 核心思路&#xff1a;顶点偏移计算 与 顶点偏移忽略 3.1 纹理偏移 视觉上让旗帜保持动态飘动&a…...

大模型思维链推理的综述:进展、前沿和未来

转自公众号AIRoobt A Survey of Chain of Thought Reasoning: Advances, Frontiers and Future 思维链推理的综述&#xff1a;进展、前沿和未来 摘要&#xff1a;思维链推理&#xff0c;作为人类智能的基本认知过程&#xff0c;在人工智能和自然语言处理领域引起了极大的关注…...

项目一:使用 Spring + SpringMVC + Mybatis + lombok 实现网络五子棋

一&#xff1a;系统展示: 二&#xff1a;约定前后端接口 2.1 登陆 登陆请求&#xff1a; GET /login HTTP/1.1 Content-Type: application/x-www-form-urlencodedusernamezhangsan&password123登陆响应&#xff1a; 正常对象&#xff1a;正常对象会在数据库中存储&…...

openEuler 系统中 Samba 文件共享服务器管理(windows、linux文件共享操作方法)

一、Samba 简介 Samba 是在 Linux 和 Unix 系统上实现 SMB/CIFS 协议的一个免费软件&#xff0c;使得这些系统可以与 Windows 系统进行文件和打印机共享。通过 Samba&#xff0c;可以将 openEuler 系统配置为文件服务器&#xff0c;让 Windows、Linux 和其他支持 SMB/CIFS 协议…...

使用 Elasticsearch 进行语义搜索

Elasticsearch 是一款功能强大的开源搜索引擎&#xff0c;可用于全文搜索、分析和数据可视化。传统上&#xff0c;Elasticsearch 以其执行基于关键字/词汇的搜索的能力而闻名&#xff0c;其中文档基于精确或部分关键字匹配进行匹配。然而&#xff0c;Elasticsearch 已经发展到支…...

软考:中间件

中间件 中间件是一类位于操作系统软件与用户应用软件之间的计算机软件&#xff0c;它包括一组服务&#xff0c;以便于运行在一台或多台机器上的多个软件通过网络进行交互。 中间件的主要功能包括通信支持和应用支持。 通信支持为应用软件提供平台化的运行环境&#xff0c;屏蔽…...

银行家算法(Banker’s Algorithm)

银行家算法&#xff08;Banker’s Algorithm&#xff09;是计算机操作系统中一种避免死锁发生的著名算法。该算法由艾兹格迪杰斯特拉&#xff08;Edsger Dijkstra&#xff09;在1965年为T.H.E系统设计&#xff0c;其核心理念基于银行借贷系统的分配策略&#xff0c;以确保系统的…...

用魔数严谨的判别文件类型:杜绝上传风险

在文件处理和管理中&#xff0c;确定文件的类型是一个常见的需求。虽然文件扩展名可以提供一些信息&#xff0c;但并不总是可靠的。魔数&#xff08;Magic Numbers&#xff09;是一种更为准确的方法&#xff0c;通过检查文件开头的特定字节序列来识别文件类型。本文将介绍如何在…...

【MacOS实操】如何基于SSH连接远程linux服务器

MacOS上远程连接linux服务器&#xff0c;可以使用ssh命令pem秘钥文件连接。 一、准备pem秘钥文件 如果已经有pem文件&#xff0c;则跳过这一步。如果手上有ppk文件&#xff0c;那么需要先转换为pem文件。 macOS 的默认 SSH 客户端不支持 PPK 格式&#xff0c;你需要将 PPK 文…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...