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;
}

 

posted @ 2020-08-05 16:14  杰瑞与汤姆  阅读(168)  评论(0编辑  收藏  举报