链接:https://www.nowcoder.com/acm/contest/134/H
来源:牛客网

题目描述

有n个盒子摆成一排,每个盒子内都有ai个糖果。
现在你可以执行以下操作:
·你可以选择任意一个盒子,在选择的盒子内吃掉一个糖果。
对你的要求如下:
·任何m个相邻的盒子内糖果数量不能超过x个。
请问,实现要求的最少操作次数是多少?

输入描述:

第一行三个数字n, m, x(2 ≤ n,m ≤ 10

6

,1 ≤ x ≤ 10

9

)。
第二行n个数字(1 ≤ a

i

 ≤ 10

9

)。

输出描述:

输出一个操作数,代表实现要求的最少操作数。

输入例子:
3 2 3
2 1 2
输出例子:
0

-->

示例1

输入

复制

3 2 3
2 1 2

输出

复制

0

说明

2 1 2满足题目要求,任意相邻的两个数值之和均不超过3,所以不需要进行任何操作。

题解:尺取思想,先找出n个数中前m个数需要多少操作数,
然后再将这长度为m的滑块以每次滑动一步的操作,
更新每次滑动后所需要加的操作数,滑到最后既可以得到结果
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+;
ll n,m,x;
ll a[maxn];
int main(){
ios::sync_with_stdio(false);
cin>>n>>m>>x;
for(int i=;i<=n;i++){
cin>>a[i];
}
ll sum=;
for(int i=;i<=m;i++){
sum+=a[i];
}
int pos=m;
ll ans=;
while(sum>x){
ll tt=min(sum-x,a[pos]);
a[pos]-=tt;
sum-=tt;
ans+=tt;
pos--;
}
for(int i=m+;i<=n ;i++){
sum+=a[i];
sum-=a[i-m];
if(sum>x){
ll tt=min(sum-x,a[i]);
a[i]-=tt;
sum-=tt;
ans+=tt;
}
}
cout<<ans<<endl;
return ;
}

最新文章

  1. 各种UserAgent的列表
  2. HDU 4865 Peter&#39;s Hobby --概率DP
  3. yii2解析非x-www-form-urlencoded类型的请求数据(json,xml)
  4. slidingMenu默认显示菜单
  5. hdu 4941 Magical Forest ( 双重map )
  6. 修改 SVN 账户密码的方法
  7. 【DP_树形DP专题】题单总结
  8. Oracle expdp数据泵导出,并在文件上附加上日期格式
  9. 前端性能优化 —— 添加Expires头
  10. C++实现词法分析器
  11. 如何用git把本地代码上传到github
  12. MVC初级知识之——View与Controller的讲解
  13. python关键字与标识符
  14. ubuntu/debian ia-libs
  15. Oozie的详细启动步骤(CDH版本的3节点集群)
  16. Datenbanksystem
  17. debug - vue中通过ajax获取数据时,如何避免绑定的数据中出现property of undefined错误
  18. EasyPlayer RTSP播放器:一个适用于安防行业的工具利器(EasyPlayer Windows v2.0.17.0709)
  19. 设置VS以管理员身份运行
  20. 【314】putty 自动登录

热门文章

  1. Nagios 监控Windows服务器(详细篇)
  2. SSO 单点登录总结(PHP)
  3. 39.VUE学习--组件,子组件中data数据的使用,x-template模板的使用,改变for循环里的某条数据里的值
  4. 多通道CNN
  5. 解决win10子系统Ubuntu新装的mysql 不能root登陆方法
  6. C语言真正的编译过程(4个步骤~~预编译,编译,汇编,连接)
  7. Numpy基础数据结构 python
  8. 007---Django的视图层
  9. laravel5.5授权系统
  10. 有哪些值得一读的优秀开源 JS 代码