Codeforces 1220 C. Substring Game in the Lesson

比较水的一个C题,做cf还是得看分数

题意

Ann和Mike做游戏,游戏如下:
给定一个字符串 s s s,以及一个初始子串 [ l , r ] [l,r] [l,r],初始位置 l = k , r = k l = k,r = k l=k,r=k,每次操作选择一个新的 l ′ , r ′ l',r' l,r, l ′ < = l l' <= l l<=l并且 r ′ = > r r' => r r=>r,新的子串比原来子串的字典序要小,没有办法再进行操作的人输.Ann为先手,Mike后手,对于每一个 1 < = k < = ∣ s ∣ 1<=k<=|s| 1<=k<=s,每个人都采取最优的策略,输出赢的人是谁.

分析与解答

对于一个字符串,在当前字符串后边加任何字符只会让字典序变大.对于在当前字符串之前加上字符,开头的字符一定要比当前开头的字符小.作为先手,如果在可以在当前字符之前有比当前字符小的,那么就将左区间拓展到最左能够到达的位置,如果没有就是后手赢.

代码

/*************************************************************************
	> File Name: 2019_10_6_3.cpp
	> Author: z472421519
	> Mail: 
	> Created Time: 2019年10月06日 星期日 16时23分39秒
 ************************************************************************/
 
#include <bits/stdc++.h>
#include <cstdio>
#include <cstring>
#define MAXN 500003
using namespace std;
 
char s[MAXN],num[MAXN];
int main()
{
    scanf("%s",s + 1);
    num[0] = 'z';
    int len = strlen(s + 1);
    for(int i = 1;i <= len;i++)
    {
        num[i] = num[i - 1];
        if(s[i] <= num[i])
        {
            num[i] = s[i];
            printf("Mike\n");
        }
        else
            printf("Ann\n");
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值