洛谷——P3817 小A的糖果

 https://www.luogu.org/problem/show?pid=3817

题目描述

小A有N个糖果盒,第i个盒中有a[i]颗糖果。

小A每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中加起来都只有x颗或以下的糖果,至少得吃掉几颗糖。

输入输出格式

输入格式:

第一行输入N和x。

第二行N个整数,为a[i]。

输出格式:

至少要吃掉的糖果数量。

输入输出样例

输入样例#1:
3 3
2 2 2
输出样例#1:
1

输入样例#2:
6 1
1 6 1 2 0 4
输出样例#2:
11
输入样例#3:
5 9
3 1 4 1 5
输出样例#3:
0

说明

样例解释1

吃掉第二盒中的糖果。

样例解释2

第二盒吃掉6颗,第四盒吃掉2颗,第六盒吃掉3颗。

30%的测试数据,2<=N<=20,0<=a[i], x<=100

70%的测试数据,2<=N<=1000,0<=a[i], x<=10^5

100%的测试数据,2<=N<=10^5,0<=a[i], x<=10^9

贪心,注意long long 不开80.。

 1 #include <algorithm>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 const int N(1e5+15);
 7 long long n,x,a[N],ans;
 8 
 9 void read(long long &x)
10 {
11     int ch=getchar();x=0;
12     for(;ch<'0'||ch>'9';) ch=getchar();
13     for(;ch>='0'&&ch<='9';ch=getchar())
14         x=ch-'0'+x*10; 
15 }
16 
17 int main()
18 {
19     read(n); read(x);
20     for(long long i=1;i<=n;i++) read(a[i]);
21     for(long long i=1;i<n;i++)
22     {
23         long long temp=a[i]+a[i+1];
24         if(temp<=x) continue;
25         ans+=temp-x;a[i+1]-=temp-x;
26     }
27     printf("%lld",ans);
28     return 0;
29 }
AC
——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
原文地址:https://www.cnblogs.com/Shy-key/p/7105079.html