题目链接
题目的意思很简单,只需要注意几点:
再第二个阶段的时候可以选择钓鱼或者制作鱼饵,如果这个时候有鱼饵就先钓鱼,没有鱼饵就制作鱼饵,这样过一遍之后如果还有剩下的鱼饵,比如剩下10
鱼饵,那么ans
可以直接加上10/2
,就架设了在这10个第二阶段的时候有5个阶段制作鱼饵,另外5个阶段钓鱼了
还有一点,我用了memeset
直接TLE了,这题不需要,因为给了字符串长度,判断的时候不会越界,所以不需要清空
#include<iostream>
#include<algorithm>
#include<queue>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<string>
using namespace std;
char s[2005001];
int main()
{
long long int t,l,ans,k;
long long int m;//当前鱼耳数量
long long int n;//可以钓鱼的机会
long long int a;//还剩可以获得的鱼饵数量
long long int b;//还剩可以钓鱼的机会
cin>>t;
string jj;
char kk; memset(s,0,sizeof(s));
while(t--)
{
cin>>l;
m=n=k=ans=0;
for(long long int j=0;j<l;j++)
{
cin>>kk;
if(kk=='0'&&m>0) {m--,ans++;}
if(kk=='1') m++;
if(kk=='2'||kk=='3') ans++;
}
ans+=m/2;
printf("%lld\n",ans);
}
return 0;
}