2020牛客暑期多校训练营(第三场)A-B-L(近期实验,其他看情况补题解)

A Clam and Fish

(贪心)在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意:

有一场捕鱼游戏。
有n轮,每一轮都可能会是三种状态。

  • 状态0:有0条鱼,0个蛤蜊(鱼饵)。
  • 状态1:有0条鱼,1个蛤蜊(鱼饵)。
  • 状态2:有1条鱼,0个蛤蜊(鱼饵)。
  • 状态3:有1条鱼,1个蛤蜊(鱼饵)。

而题目里的每一轮 i i i 都只能 进行以下一种操作。

  • 操作1 : 如果当前状态有一个蛤蜊,可以选择把蛤蜊作为鱼饵。之后这个鱼饵可以在后面钓鱼。
  • 操作2:如果鱼塘里有鱼,可以不花费鱼饵钓到1条鱼。
  • 操作3:如果有鱼饵,可以选择掉一条鱼。之后鱼饵数减少1
  • 操作4: 鱼饵减少1.

思路:

可以动态统计,鱼饵数。

  1. 之后假如有鱼在鱼塘,那么肯定直接钓鱼。
  2. 假如没有鱼在鱼塘,详见代码的情况1和情况2.

AC

#include <iostream>
#include <string>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    string s;
    int t;cin>>t;
    while(t--)
    {
        int n;cin>>n;
        int p=0,ans=0,x;
        cin>>s;
        int cnt0, cnt1, cnt2;
        cnt0=cnt1=cnt2=0;
        for(int i=0; i<s.size(); i++)
        {
            //.string tmp=s[i];
           // x=stoi(tmp);
           x=s[i]-'0';
          // cout<<x<<' ';
           if(x==0){if(cnt1){cnt0++;cnt1--;}}//对于什么都没有的情况,有鱼饵那么钓鱼。
           else if(x==1)cnt1++;//对于鱼饵数先统计
           else cnt2++;
        }
     //  cout<<cnt2<<' '<<cnt0<<' '<<cnt1/2<<endl;
        ans=cnt2+cnt0+cnt1/2;//鱼饵数由于可能有多的,那么对于剩下的蛤蜊,一半做鱼饵,一半钓鱼即可。
        cout<<ans<<endl;
    }
    return 0;
}

反思

其实早就做出来了,不过因为没有考虑 if 的 和 else if 的匹配一直wa。

在这里插入图片描述

在这里插入图片描述

B Classical String Problem

(思维)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意:

输入一个字符串,有q此询问。
每次询问有

  • A x 回答第x个字符是什么
  • C x把字符串的前x个后置(若x为正),反之后x个前置。

思路:

由于每次操作字符串的相对位置不发生变化,本题可以用一个初始位置的指针去指向第一个元素。

反思

本题卡cin,cout对于 1 e 6 1e6 1e6,见到就直接scanf或者快读吧。

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
int main()
{
  //  ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    string s;cin>>s;
    int len=s.size(),q;
    cin>>q;
    int start=0;
    while(q--)
    {
       char tmp[10];// string tmp;
        int b;
        scanf("%s%d", tmp, &b);//cin>>tmp>>b;
        if(tmp[0]=='A')printf("%c\n",s[(start+b-1)%len]);//cout<<s[(start+b-1)%len]<<endl;
        else start=(start+b+len)%len;
    }
    return 0;
}

L-Problem L is the Only Lovely Problem

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意:

给你一个字符串,假如它含有前置lovely,那么这个字符串就是lovely,否则ugly

思路:

由于题目可能不区分大小写,所以这里用一个 ch=tolower(char)

AC

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const string t[2]={"lovely","ugly"};
int main()
{
    string s;
    cin>>s;
    for(int i =0; i<s.size(); i++)s[i]=tolower(s[i]);
    int flag=1;
    for(int i=0; i<t[0].size(); i++)if(t[0][i]!=s[i])flag=0;
    if(flag)cout<<t[0]<<endl;
    else cout<<t[1]<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值