标签:字符 第一个 奇数 AT2153 偶数 Game 字符串 长度 Ordinary
结论
根据题意以及我和我妈的多次试验,结论大致如下:
-
如果字符串的第一个字符与最后一个字符相等:
-
字符串长度为偶数时第一个人赢。
-
字符串长度为奇数时第二个人赢。
-
-
如果字符串的第一个字符与最后一个字符不相等:
-
字符串长度为偶数时第二个人赢。
-
字符串长度为奇数时第一个人赢。
-
举例验证:
假设现在字符串是“abcab”,第一个人先把“c”删掉,就会形成一个“abab”的字符串,由于字符串的两边无法删除,所以说第二个人无论怎么删都赢不了,第一个人获胜。
我们可以发现当字符串删除到无法删除时总会出现一个只有两个字符交替出现的字符串,因为不可能出现只有一种字符的字符串(不能有相邻的两个字符相等),而且两边的字符无法删除,所以也不会出现只有一个字符的情况。
如果要获胜,就要让对方无论怎么删除都会使两个相同的字符相邻,也就是说要让 $ s_{i-1} = s_{i+1} $ ,即所有奇数下标位置上的字符相同,所有偶数下标位置上的字符相同,并且奇偶交替出现(不懂的可以再看看上面的例子)。
若字符串长度为奇数,则首尾下标都为奇数,若字符串长度为偶数,则首位下标都为偶数。这时若首尾相同,长度为偶数时第一个人必胜。反之,则第二个人必胜。而当首尾不相同时长度为奇数时第一个人必胜。反之,则第二个人必胜。
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
string s;
cin>>s;
int len=s.size();
if(s[0]==s[len-1])//如果首尾相同
{
if(len%2==0) cout<<"First"<<endl;//长度为偶数第一个人赢
else cout<<"Second"<<endl;//否则第二个人赢
return 0;
}
else//如果首尾不相同
{
if(len%2==0) cout<<"Second"<<endl;//长度为偶数第二个人赢
else cout<<"First"<<endl;//否则第一个人赢
return 0;
}
return 0;
}
标签:字符,第一个,奇数,AT2153,偶数,Game,字符串,长度,Ordinary 来源: https://www.cnblogs.com/exaqp/p/15860324.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。