http://codeforces.com/contest/1154/problem/D
解题:
1.无光的时候优先使用太阳能电池。
2.有光的时候
(1)太阳能电池没满电,让它充,使用普通电池
(2)太阳能电池满电,使用太阳能电池
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<math.h> #include<string.h> #include<algorithm> #include<string> #include<vector> #include<iostream> #include<cstring> #include<set> #include<queue> #define inf 0x3f3f3f3f #define ll long long using namespace std; int n,a,b; int s[200005]; int main() { while(scanf("%d%d%d",&n,&a,&b)!=EOF)///路段 普通电池 太阳能电池 { for(int i=1;i<=n;i++) scanf("%d",&s[i]); int maxx=b; int sum=0; for(int i=1;i<=n;i++) { if(s[i]==0)///无光 { if(b)///优先使用太阳能电池 { b--; sum++; } else if(a)///其次使用普通电池 { a--; sum++; } else break; } else ///有光 { if(b==maxx)///太阳能满了就优先使用它 { b--; sum++; } else if(a)///太阳能没满就让太阳能充电,用普通电池 { b++; sum++; a--; } else if(b)///太阳能没满,但是普通电池已经用完了 { b--; sum++; } else break; } } printf("%d ",sum); } return 0; }