CF1700C Helping the Nature
题目大意:
给出一个长度为 n 的序列 a,每次可以进行三种操作中的一种:
- 选择i,将 a_1,a_2,...,a_i减1。
- 选择i,将 a_i,a_i+1,...,a_n减1。
- 将所有 a_i加1。
求最少需要多少次操作将所有 a_i变为0
题解:
一看这道题,就知道是个构造题
一开始也是想了很多方法,比如求一个数与其他数的差值(差一点就到正解了),或者是看绝对值与答案之间的关系(毫无卵用)。但是最后才发现,前两个操作本质上改变的是相邻两个数的差值。
于是有了一个新的思路:将响铃两个数的差值通过一步步变化变为0,并记录一下变为0后每一个数的值,最后进行全体加或减即可得到全0序列;
点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN = 200005;
int t,n,a[MAXN],del[MAXN];
signed main(){
cin >> t;
while(t--){
int ans = 0;
cin >> n;
memset(a,0,sizeof a);
for(int i = 1; i <= n; i++){
cin >> a[i];
if(i > 1){
del[i - 1] = a[i] - a[i - 1];//记录前后两个数的差值
}
}
int now = a[1];//now即你希望把数列中所有数变成的值(在这个程序中我们把now定为当前前缀中每一个数的值),这个值是变化的,在未进行操作时,我们默认将now赋值为数列中第一个元素的值
for(int i = 1; i < n; i++){
if(del[i] > 0){//分两种情况进行讨论,如果后面的数减前一个数大于0,说明后面的数比前面的数大,就应该将后缀全部减小直到差值为0,因为操作的是后缀,跟前缀无关,就不需要更新now了
ans += del[i];//答案加上操作的次数,没有问题吧?
}
else if(del[i] < 0){
now -= abs(del[i]);//如果后面的数小于前面的数,就需要将前缀减小,直到二者的差值为0,因为处理的是前缀,所以应该将now更新
ans += abs(del[i]);//更新答案
}
}
ans += abs(now);//注意,当你把所有相邻的数的差值都变为0时,序列中的数并不一定为0,因此需要再进行一次操作
cout << ans << "\n";
}
}
//不用在每次操作时更新所有数,耗时且无意义,只需要记录一下now即可
CF1700C Helping the Nature的更多相关文章
- Codeforces Round #802 (Div. 2)C. Helping the Nature(差分)
题目链接 题目大意: 给你一个有n个元素的数组a,你可以通过一下三种操作使数组的每一个值都为0: 选择一个下标i,然后让a[1],a[2]....a[ i ] 都减一; 选择一个下标i,然后让a[i] ...
- Codeforces Round #802 (Div. 2)
题集链接 A Optimal Path 水 代码 #include <bits/stdc++.h> #define endl "\n" using namespace ...
- The top 100 papers Nature explores the most-cited research of all time.
The top 100 papers Nature explores the most-cited research of all time. The discovery of high-temper ...
- myeclipse中disable maven nature
1.直接原因:出现这个问题,一般都是因为手抖误操作. 但是出现了问题,还不知道从何查起. 可能出现的场景是eclipse安装Maven插件后,右键项目却找不到Maven按钮,继而无法编译项目. 2.实 ...
- 水熊虫 - Nature Communication
想发好文章?先看好文献! 生物信息分析类的文章都有着比较明显的套路,如果你深刻的掌握了这些套路,相信有一天你也能发Nature(子刊). Extremotolerant tardigrade geno ...
- Nature:新发现挑战神经元作用传统理论 [转自科学网]
美德科学家独立进行的两项最新研究表明,单个神经元的激发就足以影响学习和行为.这一结论挑战了人们长期以来的认识,即数千个神经元的有序排列才能够产生一个行为反应.这两篇论文12月19日在线发表于<自 ...
- 强化学习(九)Deep Q-Learning进阶之Nature DQN
在强化学习(八)价值函数的近似表示与Deep Q-Learning中,我们讲到了Deep Q-Learning(NIPS 2013)的算法和代码,在这个算法基础上,有很多Deep Q-Learning ...
- 强化学习(四)—— DQN系列(DQN, Nature DQN, DDQN, Dueling DQN等)
1 概述 在之前介绍的几种方法,我们对值函数一直有一个很大的限制,那就是它们需要用表格的形式表示.虽说表格形式对于求解有很大的帮助,但它也有自己的缺点.如果问题的状态和行动的空间非常大,使用表格表示难 ...
- CF1105E Helping Hiasat
题目地址:CF1105E Helping Hiasat 首先将问题转化成图论:对每个人建立一个点,将同一次修改后的所有人代表的点两两连一条边,那么最终所求的就是这个图的最大独立集 我们知道最大独立集是 ...
随机推荐
- Spring 源码(8)Spring BeanPostProcessor的注册、国际化及事件发布机制
上一篇文章https://www.cnblogs.com/redwinter/p/16198942.html介绍了Spring的注解的解析过程以及Spring Boot自动装配的原理,大概回顾下:Sp ...
- svelte组件:svelte3.x自定义美化虚拟滚动条组件svelte-scrollbar
基于svelte3.0自定义pc端虚拟滚动条组件svelteScrollbar. svelte-scrollbar:运用svelte3.x创建的桌面pc版自定义美化滚动条组件.支持是否原生滚动条.自动 ...
- Caused by: java.lang.Exception: No native library is found for os.name=Mac and os.arch=aarch64. path=/org/sqlite/native/Mac/aarch64
编译项目报错: Caused by: java.lang.Exception: No native library is found for os.name=Mac and os.arch=aarch ...
- 从0到1使用kubebuiler开发operator
介绍 假设一个Nginx的QPS(服务器一秒内处理的请求数)上限为500,如果外部访问的QPS达到了600,为了保证服务质量,必须扩容一个Nginx来分摊请求. 在Kubernetes环境中,如果外部 ...
- 安装Suberversion[SVN]到CentOS(YUM)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Suberversion-1.7.14 硬件要求:无 安装过程 1.安装YUM-EPEL源 Su ...
- 05-STL
Day01 笔记 1 STL概论 1.1 STL六大组件 1.1.1 容器.算法.迭代器.仿函数.适配器.空间配置器 1.2 STL优点 1.2.1 内建在C++编译器中,不需要安装额外内容 1.2. ...
- 《Unix 网络编程》08:基本UDP套接字编程
基本UDP套接字编程 系列文章导航:<Unix 网络编程>笔记 UDP 概述 流程图 recvfrom 和 sendto #include <sys/socket.h> ssi ...
- [补漏]shift&算法
题意:regular number 给你一个字符串,要你输出所有(每位都符合要求的)子串,输入时告诉你每位只能填的数集. 思路: bitsetc[x]存每个数字可以存在的字符串位的二进制集合.(如3可 ...
- Python <算法思想集结>之抽丝剥茧聊动态规划
1. 概述 动态规划算法应用非常之广泛. 对于算法学习者而言,不跨过动态规划这道门,不算真正了解算法. 初接触动态规划者,理解其思想精髓会存在一定的难度,本文将通过一个案例,抽丝剥茧般和大家聊聊动态规 ...
- java基础题(5)
6.常用API 6.1string类 1.动态字符串 描述 将一个由英文字母组成的字符串转换成从末尾开始每三个字母用逗号分隔的形式. 输入描述: 一个字符串 输出描述: 修改后的字符串 示例1 输入: ...