Codeforces Round #552 (Div. 3) D题
题目网站:http://codeforces.com/contest/1154/problem/D
题目大意:给出n个数(0或1),还有a , b, a是蓄电池容量,b是电池容量,数为1时蓄电池可以充电
一小车有这样的电池和蓄电池,问小车可以从第一个数开始走多远?
题解:显然贪心,蓄电池可以经过1的时候充电,但是蓄电池满的时候就无法充电,那么显然蓄电池满的时候
经过1肯定是消耗电池,未满的时候经过1也是消耗电池,这样可以给蓄电池充电,当经过0的时候,为了让蓄电池尽快
的减少(为了经过1的时候就充电),就消耗蓄电池,当然,蓄电池没电了只能消耗电池。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=2e5+7; 4 int a[maxn]; 5 int main() 6 { 7 int x,y,n,yy,ans=0; 8 cin>>n>>x>>y;//x是电池容量,y是蓄电池容量 9 yy=y; 10 for(int i=1;i<=n;i++) scanf("%d",&a[i]); 11 for(int i=1;i<=n;i++) 12 { 13 if(a[i]==1&&(x>0||yy>0)) 14 { 15 if(yy==y) yy--,ans++; 16 else if(yy<y&&x>0) yy++,x--,ans++; 17 else if(x==0) yy--,ans++; 18 } 19 if(a[i]==0&&(x>0||yy>0)) 20 { 21 if(yy>0) yy--,ans++; 22 else x--,ans++; 23 } 24 } 25 cout<<ans<<endl; 26 }