题解 P3817 【小A的糖果】 C++题解
TAFE_ZZR
·
·
题解
模拟+贪心
这道题很简单,但是需要思考
当相邻的两盒大于x到时候,应该先吃那一盒呢?
答案:正着遍历,吃后面;反着遍历,吃前面!
为什么是这样的呢?
比如一个样例:
5 6
4 5 3 6 2
此时,若正着遍历,4+5>6,如果吃4(a[1]),就考虑不到a[3],吃5(a[2])则一举两得。
下面是代码:
#include<bits/stdc++.h>
using namespace std;
long long ans; //一定要开long long!!!
int n,x,a[100002];
main() {
cin>>n>>x; //输入
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<n;i++) //模拟,正着遍历
if(a[i]+a[i+1]>x) { //如果相邻两盒>x
ans+=a[i+1]-x+a[i]; //就吃后面的
a[i+1]=x-a[i];
}
cout<<ans; //输出
return 0;
}
求过!