洛谷 P3817 小A的糖果
阿新 • • 發佈:2017-11-19
namespace get %d https 解釋 ostream ans cstring 整數
P3817 小A的糖果
題目描述
小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
思路:貪心
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,x; long long ans; int num[100010]; int main(){ scanf("%d%d",&n,&x); for(int i=1;i<=n;i++) scanf("%d",&num[i]); for(int i=1;i<n;i++) if(num[i]+num[i+1]>x){ ans+=(num[i+1]+num[i]-x); num[i+1]-=(num[i+1]+num[i]-x); } cout<<ans; }
洛谷 P3817 小A的糖果