题目大意:

给出一个长度为 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的更多相关文章

  1. Codeforces Round #802 (Div. 2)C. Helping the Nature(差分)

    题目链接 题目大意: 给你一个有n个元素的数组a,你可以通过一下三种操作使数组的每一个值都为0: 选择一个下标i,然后让a[1],a[2]....a[ i ] 都减一; 选择一个下标i,然后让a[i] ...

  2. Codeforces Round #802 (Div. 2)

    题集链接 A Optimal Path 水 代码 #include <bits/stdc++.h> #define endl "\n" using namespace ...

  3. 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 ...

  4. myeclipse中disable maven nature

    1.直接原因:出现这个问题,一般都是因为手抖误操作. 但是出现了问题,还不知道从何查起. 可能出现的场景是eclipse安装Maven插件后,右键项目却找不到Maven按钮,继而无法编译项目. 2.实 ...

  5. 水熊虫 - Nature Communication

    想发好文章?先看好文献! 生物信息分析类的文章都有着比较明显的套路,如果你深刻的掌握了这些套路,相信有一天你也能发Nature(子刊). Extremotolerant tardigrade geno ...

  6. Nature:新发现挑战神经元作用传统理论 [转自科学网]

    美德科学家独立进行的两项最新研究表明,单个神经元的激发就足以影响学习和行为.这一结论挑战了人们长期以来的认识,即数千个神经元的有序排列才能够产生一个行为反应.这两篇论文12月19日在线发表于<自 ...

  7. 强化学习(九)Deep Q-Learning进阶之Nature DQN

    在强化学习(八)价值函数的近似表示与Deep Q-Learning中,我们讲到了Deep Q-Learning(NIPS 2013)的算法和代码,在这个算法基础上,有很多Deep Q-Learning ...

  8. 强化学习(四)—— DQN系列(DQN, Nature DQN, DDQN, Dueling DQN等)

    1 概述 在之前介绍的几种方法,我们对值函数一直有一个很大的限制,那就是它们需要用表格的形式表示.虽说表格形式对于求解有很大的帮助,但它也有自己的缺点.如果问题的状态和行动的空间非常大,使用表格表示难 ...

  9. CF1105E Helping Hiasat

    题目地址:CF1105E Helping Hiasat 首先将问题转化成图论:对每个人建立一个点,将同一次修改后的所有人代表的点两两连一条边,那么最终所求的就是这个图的最大独立集 我们知道最大独立集是 ...

随机推荐

  1. position与float

    position:fixed/absolute和float的关系:元素设置position:absolute / fixed后,float属性是没有效果的.对于position: absolute元素 ...

  2. vue-router实现原理及简易demo

    自定义路由demo,git地址: git@github.com:xsk-walter/Vue-router.git 一.router基本使用 ① 创建和路由相关的组件 ②Vue.use(vueRout ...

  3. forms组件补充与ModelForm简单使用与cookie与session

    目录 forms组件钩子函数 forms组件字段参数 字段参数 validators详解 choices详解 widget详解 forms组件字段类型 ModelForm简单使用 cookie与ses ...

  4. JS倒计时(刷新页面不影响)的实现思路

    最近在做一个项目,用到了点击按钮实现倒计时,这个用js来实现很简单.但是遇到了一个问题 页面刷新后js重新加载导致 倒计时重新开始,或者直接初始化了 后来通过 cookie 保存来实现了js倒计时,关 ...

  5. 解决WIN7无法安装高版本Node.js问题

    网上很多文章都让去安装低版本node 由于业务需求,低版本node npm 有一些包支持的不好 npm出cb() never call 本着更新npm 顺带弄个高版本的node 单独更新npm npm ...

  6. 【原创】项目一GoldenEye

    实战流程 1,通过nmap查找本段IP中存活的机器 ┌──(root㉿whoami)-[/home/whoami/Desktop] └─# nmap -sP 192.168.186.0/24 排查网关 ...

  7. KNN算法推理与实现

    Overview K近邻值算法 KNN (K - Nearest Neighbors) 是一种机器学习中的分类算法:K-NN是一种非参数的惰性学习算法.非参数意味着没有对基础数据分布的假设,即模型结构 ...

  8. 【转载】k8s入坑之路(2)kubernetes架构详解

    每个微服务通过 Docker 进行发布,随着业务的发展,系统中遍布着各种各样的容器.于是,容器的资源调度,部署运行,扩容缩容就是我们要面临的问题. 基于 Kubernetes 作为容器集群的管理平台被 ...

  9. 技术分享 | Appium环境安装与架构介绍

    原文链接 Appium架构 Appium 设计哲学 不需要为了自动化而重新编译或修改被测应用 不应该让移动端自动化测试限定在某种语言或者某个具体的框架 不要为了移动端的自动化测试而重新造轮子 移动端自 ...

  10. .NET6 开源之JSON 2 SQL (JORM框架)

    什么是JORM框架? 全称 :Json  Object Relational Mapping   ,它是通过JSON 对象 去实现数据库的一个关系映射 ,我理想中完整的JORM包含功能有 ·1.表权授 ...