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 首先将问题转化成图论:对每个人建立一个点,将同一次修改后的所有人代表的点两两连一条边,那么最终所求的就是这个图的最大独立集 我们知道最大独立集是 ...
随机推荐
- position与float
position:fixed/absolute和float的关系:元素设置position:absolute / fixed后,float属性是没有效果的.对于position: absolute元素 ...
- vue-router实现原理及简易demo
自定义路由demo,git地址: git@github.com:xsk-walter/Vue-router.git 一.router基本使用 ① 创建和路由相关的组件 ②Vue.use(vueRout ...
- forms组件补充与ModelForm简单使用与cookie与session
目录 forms组件钩子函数 forms组件字段参数 字段参数 validators详解 choices详解 widget详解 forms组件字段类型 ModelForm简单使用 cookie与ses ...
- JS倒计时(刷新页面不影响)的实现思路
最近在做一个项目,用到了点击按钮实现倒计时,这个用js来实现很简单.但是遇到了一个问题 页面刷新后js重新加载导致 倒计时重新开始,或者直接初始化了 后来通过 cookie 保存来实现了js倒计时,关 ...
- 解决WIN7无法安装高版本Node.js问题
网上很多文章都让去安装低版本node 由于业务需求,低版本node npm 有一些包支持的不好 npm出cb() never call 本着更新npm 顺带弄个高版本的node 单独更新npm npm ...
- 【原创】项目一GoldenEye
实战流程 1,通过nmap查找本段IP中存活的机器 ┌──(root㉿whoami)-[/home/whoami/Desktop] └─# nmap -sP 192.168.186.0/24 排查网关 ...
- KNN算法推理与实现
Overview K近邻值算法 KNN (K - Nearest Neighbors) 是一种机器学习中的分类算法:K-NN是一种非参数的惰性学习算法.非参数意味着没有对基础数据分布的假设,即模型结构 ...
- 【转载】k8s入坑之路(2)kubernetes架构详解
每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器.于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题. 基于 Kubernetes 作为容器集群的管理平台被 ...
- 技术分享 | Appium环境安装与架构介绍
原文链接 Appium架构 Appium 设计哲学 不需要为了自动化而重新编译或修改被测应用 不应该让移动端自动化测试限定在某种语言或者某个具体的框架 不要为了移动端的自动化测试而重新造轮子 移动端自 ...
- .NET6 开源之JSON 2 SQL (JORM框架)
什么是JORM框架? 全称 :Json Object Relational Mapping ,它是通过JSON 对象 去实现数据库的一个关系映射 ,我理想中完整的JORM包含功能有 ·1.表权授 ...