Game with string
time limit per test 1 second
memory limit per test 256 megabytes
题目链接http://codeforces.com/contest/1104/problem/B
题目大意:给你一个字符串,每次只能删除相邻两个相同的字母,直到不能删除者输掉游戏,问是否先手的胜利,如果是则输出Yes,否则输出No。
输赢的条件规律到是很简单,就是奇数个双对胜,否则败,但将某对数删去之后它的前后会凑在一起我们要再次判断它是否成双成对。。。如此循环累加。
只不过这个过程用vector来模拟的话就很方便了,我们找到一对之后将它用erase直接移除,然后位置下移一位,再判断。
以下是AC代码:
#include <bits/stdc++.h>
using namespace std;
const int mac=1e5+10;
char s[mac];
vector<int>g;
int main()
{
int n,k;
cin>>n>>k;
scanf ("%s",s);
int len=strlen(s);
int tot=0;
for (int i=0; i<len; i++)
g.push_back(s[i]-'a'+1);
for (int i=0; i+1<g.size(); i++){
if (g[i]==g[i+1]){
tot++;
g.erase(g.begin()+i);
g.erase(g.begin()+i);
if (i) i-=2;
else i--;
}
}
if (tot&1) printf ("Yes\n");
else printf ("No\n");
return 0;
}