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的时候就充电),就消耗蓄电池,当然,蓄电池没电了只能消耗电池。

 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 } 
View Code
原文地址:https://www.cnblogs.com/duxing201806/p/10726582.html