2020牛客多校第三场A题Clam and Fish(模拟贪心)
题意:输入一个n长字符串表示n天的池塘,0表示该天没有任何东西,1表示有蛤蜊(制作鱼饵的材料),2表示有鱼,3表示有鱼又有蛤蜊。每天我们有4种操作可以选择,1.池塘有鱼我们可以直接捕鱼不消耗鱼饵,2.池塘有蛤蜊我们可以捉蛤蜊,3.有蛤蜊的前提的下可以制作鱼饵,4.不做任何操作。 输出做多可以捕捉多少条鱼。
题解:贪心,有鱼直接捕鱼,有蛤蜊也全抓。但是要我们把多的蛤蜊的一半的天数拿来抓鱼是最优的。所以最后答案加上a/2。
#include <bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; const int maxn = 2e6 + 7; typedef long long ll; char s[maxn]; int main() { int n,m,t; scanf("%d",&t); while(t--){ scanf("%d",&n); scanf("%s",s); int len=strlen(s); ll f=0,a=0; for(int i=0;i<len;i++){ if(s[i]=='1') { a++; }else if( s[i]=='0'){ if( a>0){ a--; f++; } }else if(s[i]=='2'||s[i]=='3') { f++; } } if(a>0) f+=a/2; printf("%d\n",f); } return 0; }