博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客小白月赛4——H-相邻的糖果
阅读量:5054 次
发布时间:2019-06-12

本文共 1140 字,大约阅读时间需要 3 分钟。

链接:

来源:牛客网

题目描述

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

输入描述:

第一行三个数字n, m, x(2 ≤ n,m ≤ 10
6
,1 ≤ x ≤ 10
9
)。 第二行n个数字(1 ≤ a
i
≤ 10
9
)。

输出描述:

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

输入

3 2 32 1 2

输出

0

说明

2 1 2满足题目要求,任意相邻的两个数值之和均不超过3,所以不需要进行任何操作。 题解:尺取思想,先找出n个数中前m个数需要多少操作数, 然后再将这长度为m的滑块以每次滑动一步的操作, 更新每次滑动后所需要加的操作数,滑到最后既可以得到结果
#include
using namespace std;typedef long long ll;const int maxn = 1e6+5;ll n,m,x;ll a[maxn];int main(){ ios::sync_with_stdio(false); cin>>n>>m>>x; for(int i=1;i<=n;i++){ cin>>a[i]; } ll sum=0; for(int i=1;i<=m;i++){ sum+=a[i]; } int pos=m; ll ans=0; while(sum>x){ ll tt=min(sum-x,a[pos]); a[pos]-=tt; sum-=tt; ans+=tt; pos--; } for(int i=m+1;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<
<
View Code

 

 

转载于:https://www.cnblogs.com/buerdepepeqi/p/9194258.html

你可能感兴趣的文章
Webpack4 学习笔记四 暴露全局变量、externals
查看>>
CF1005F Berland and the Shortest Paths
查看>>
vscode点击ctrl键报错Request textDocument/definition failed.
查看>>
POJ 3368 Frequent values (RMQ,4级)
查看>>
java 练习题3
查看>>
对象生命周期的简单理解
查看>>
c# 日志记录 行号
查看>>
CSS3---12.过渡动画
查看>>
[NOI1995]石子合并 四边形不等式优化
查看>>
vim 实现begin end 配对 使用matchit插件
查看>>
linux挂载磁盘以及扩容主分区
查看>>
[转]Python模块学习:threading 多线程控制和处理
查看>>
PHP链接sqlserver出现中文乱码
查看>>
[计算机]Alan Perlis人物简介
查看>>
Android-----第三方 ImageLoader 的简单配置和使用
查看>>
零基础入门Python3-详解分支
查看>>
js数组去重
查看>>
A. E-mail
查看>>
C# 反射机制以及方法
查看>>
C# Socket服务端与客户端通信(包含大文件的断点传输)
查看>>