题目大意:
一个游戏包含 n 个阶段,每个阶段分四种类型:
类型0:没有🐟,没有蛤;
类型1:只有一只蛤;
类型2:只有一条🐟;
类型3:有一条🐟,一只哈;
每个阶段可以执行以下 4 操作之一(只能选一个操作进行):
1:用一只蛤换取一包鱼饵;
2:如果有一条鱼,无需鱼饵也捕获这条🐟;
3:无论在此阶段有没有🐟,都可以用一包鱼饵捕获一条🐟;
4:跳过此阶段;
解题思路:
首先,最能想到的是,在类型 2 和类型 3 时,直接抓鱼,与数量加 1 。
其次,要处理类型 0 与类型 1 ,在类型 1 时,只有一只蛤,可以进行的操作是:换一包鱼饵 或者 捕捉一条鱼(在有鱼饵的前提下);在类型 0 时,没有鱼也没有蛤,可以进行的操作是:跳过此阶段 或者 捕捉一条鱼(在有鱼饵的前提下)。
所以,我们先忽视前导0,在2或3时无脑在答案加1。
后面遇到一个0,就尽可能使用鱼饵;遇到1,就先默认制作鱼饵,将现在拥有的鱼饵数量加1。
最后如果有剩余鱼饵>=,则可以用2次类型1的多余阶段来再抓一条鱼(一次换鱼饵,一次抓鱼)。
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
char arr[n+5];
int ans=0,b=0;///ans:鱼的数量,b:鱼饵的数量
for(int i=0; i<n; i++)
{
cin>>arr[i];
if(b>0&&arr[i]=='0')
{
ans++;
b--;
}
if(arr[i]=='2'||arr[i]=='3')
{
ans++;
}
if(arr[i]=='1')
{
b++;
}
}
ans=ans+b/2;
cout<<ans<<endl;
}
return 0;
}
会有好心情,加油【微笑】。