题解 P3817 【小A的糖果】
Heartlessly · · 题解
作为洛谷 7 月月赛的第一题,是一道很水的模拟题(抢沙发啊)
-
具体思路:
-
此题根本不需要数组,多设几个变量即可;
-
从第二个盒子到最后一个盒子判断,如果该盒子与前一个盒子的糖果数之和大于x,则减去相应的数量,与x刚好相等,答案也加上小A吃掉糖果的数量(其实也包含一点贪心);
-
输出答案。
上代码 2333:
#include <iostream>
using namespace std;
long long n , x , ans , p , t;//n和x的意思见原题,ans是最终答案,用来计吃掉了几颗糖,p表示前一个盒子,t表示当前的盒子。
int main()
{
ios::sync_with_stdio(0);//关闭同步流加快速度,c++党必学。
cin >> n >> x >> p;//输入,注意多输入一个p。
for ( int i = 1 ; i < n ; i++ )//判断 n-1 个盒子,用 for 循环。
{
cin >> t;//输入当前盒子的糖果数,
if ( t + p > x )//如果不满足要求(两盒糖果总和比x多)
ans += t + p - x , t = x - p;//就让小A吃掉相应的糖果数,刚好等于x,ans也加上。
p = t;//现在的盒子有变成了前一个盒子,把t赋值给p。
//友情提示,不要用while循环一个一个减,后面几个点会超时哦~!
}
cout << ans;//输出答案。
return 0;//养成好习惯,返回0
}