描述及思路
见fanhq666的博客
http://fanhq666.blog.163.com/blog/static/81943426201242722715239/
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <cmath>
using namespace std;
#define NMAX 100001
vector <int > p;
char tin[NMAX];
int txor;
int ans;
int xxor(vector <int>&a)
{
int ret=0;
for (int i=0;i<a.size();i++)
ret^=a[i];
return ret;
}
int solve(vector <int>&a)
{
int tmp;
//sort(&a[0],&a[0]+a.size());
//sort(a.begin(),a.begin()+a.size());
//for (int i=0;i<a.size();i++)printf("%d ",a[i]);puts("");
for (int i=a.size()-1;i>=0;i--)
{
tmp=txor^a[i];
if (a[i]>tmp) ans=min(ans,a[i]-tmp);
for (int j=a[i];j>0;j--)
for (int k=a[i];k>0;k--)
if (j+k<a[i])
if ((j^k)==tmp)
ans=min(ans,a[i]-j-k);
}
return ans;
}
int main()
{
freopen("chess.in","r",stdin);
freopen("chess.out","w",stdout);
int len,tmp,M;
scanf("%d",&M);
for (int m=0;m<M;m++)
{
ans=NMAX+100;
scanf("%s",tin);
tmp=0;
len=strlen(tin);
p.clear();
for (int i=0;i<len;i++)
{
if (tin[i]=='X')
{
if (tmp) p.push_back(tmp);
tmp=0;
}
else
{
tmp++;
}
}
if (tmp) p.push_back(tmp);
txor=xxor(p);
//for (int i=0;i<p.size();i++)printf("%d ",p[i]);puts("");
if (p.size()==1)
{
if (p[0]==1||p[0]==2)
printf("-1\n");
else
printf("%d\n",(p[0]+1)%2+1);
}
else
{
if (txor==0) printf("-1\n");
else printf("%d\n",solve(p));
}
}
return 0;
}