题目地址

这道题可以用来检测一下你是否学会了差分,或者你可以更加透彻的理解差分

我们把 \(cf[]\) (差分)数组拿出了,就可以发现这道题就是每次可以在 \(cf[]\)中 选两个数,一个+1,一个-1,如何用最少的步数吧 \(cf[2]-cf[n]\) 中的所有数变成0

考虑到 \(cf[]\) 数组中有负数也有正数,我们设 \(p\) 是所以负数之和,\(q\) 是所以正数之和,我们肯定优先正负抵消,设正负抵消后还有 \(|p-q|\),这是我们让它和 \(cf[1]\) 或者 \(cf[n+1]\) 消,所以最短步数是 \(\text{max}(p,q)\),不同最后值是 \(|p-q|+1\)

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5+7;
int n,p,q;
int a[N],cf[N];
signed main()
{
scanf("%lld",&n);
for(int i=1;i<=n;++i) {
scanf("%lld",&a[i]);
cf[i] = a[i] - a[i-1];
}
for(int i=2;i<=n;++i) {
if(cf[i] > 0) p += cf[i];
if(cf[i] < 0) q += -cf[i];
}
printf("%lld\n%lld\n",max(p,q),abs(p-q)+1);
return 0;
}

最新文章

  1. oh my zsh
  2. java并发之volatile
  3. 搜索引擎Solr系列(二): Solr6.2.1 从MySql中导入数据
  4. 如何用Fiddler对Android应用进行抓包
  5. android 5.0 (lollipop)源码编译环境搭建(Mac OS X)
  6. dancing link 学习资源导航+心得
  7. 【转】BAT 延迟变量
  8. 高德地图 JavaScript API 开发系列教程(一)
  9. Any Way You Slice It (向量旋转 以及 判断线段是否相交)(模板)
  10. [国嵌攻略][156][I2C自编设备驱动设计]
  11. obj-c中SEL签名和Invocation示例
  12. 13.app后端为什么要用到消息队列
  13. 自动化批量管理工具pssh - 运维小结
  14. kernel事件通知userspace
  15. rosdep update 超时
  16. Mybatis if 判断等于一个字符串
  17. Bat脚本实现监控进程功能
  18. 嵌套的ng-repeat双层循环,内层如何获取外层的$index?
  19. 图解VS2005之单元测试
  20. mybatis定义拦截器

热门文章

  1. [转]Linux下防止进程使用swap及防止OOM机制导致进程被kill掉
  2. js模板块概念
  3. postgresql源码编译安装(centos)
  4. 模拟赛DAY1 T1大美江湖
  5. fedora23帮定键盘系统操作快捷键
  6. 002-es5.4.3结合spring-data-elasticsearch3.0.0.0使用
  7. 去掉IE浏览器里的脚本控件提示
  8. Mac 10.14 下为php 安装xdebug 并让vscode支持
  9. 【ABAP系列】SAP ABAP 关于ALV布局保存选项的讲解
  10. vue自定义组件(通过Vue.use()来使用)即install的使用