2020多校联赛第三场A题: Clam and Fish

题目截图
题目大意:
一个游戏包含 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;
}

会有好心情,加油【微笑】。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值