我是靠谱客的博主 热心学姐,最近开发中收集的这篇文章主要介绍[AtCoder ABC048] D- An Ordinary Game(博弈),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题意:

给一个字符串s,相邻字符都不相等。A,B两人博弈,取法是取走某一个字符后,这个字符的前后不能相等,否则就不能取。并且第一个和最后一个不能取。谁无法取谁就输了,A先手。

思路:

首先,我们看一下最不极端的字符串abcdef,在这种情况下。bcde都能够被取走,B赢。
然后,再看一下最极端的字符串ababab,在这种情况下。一个都不能被取走,B赢。
其实不难发现,在ababab中,去掉第二和第三个字符后为abab,此时中间ba又能够被取走。只剩下第一个和最后一个ab。既然如此,我们依然可以认为中间的baba是可以被取走的。
所以在前后不相等的情况下,任何一个字符串都可以由极端的和不极端的组合而成
(可以认为去掉所有不极端,就只剩下极端了)

既然如此,那么答案就是固定的了,字符串长度为奇数A赢,偶数B赢。
是不是很简单?其实还差一点。题目中还提到一点第一个和最后一个不能取,如果第一个和最后一个相等那么最后会剩下三个不能取,比如aba。所以加一个判断,相等长度减一即可。

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s; cin>>s;
    int len=s.size();
    if(s[0]==s[s.size()-1]) len--;
    if(len%2==0)
        cout<<"Second"<<endl;
    else
        cout<<"First"<<endl;
    return 0;
}

最后

以上就是热心学姐为你收集整理的[AtCoder ABC048] D- An Ordinary Game(博弈)的全部内容,希望文章能够帮你解决[AtCoder ABC048] D- An Ordinary Game(博弈)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部