[破碎的状态] [-21] poj 3128
感谢@JCarlson 翻译
题意:
求某个字符串是否是从"ABCD...Z"通过某个置换连换两次得到
这一题..
对于长度为奇数置换,可以从另一个奇数置换直接换过来,我们不用管
对于长度为偶数的置换,一定是它长度的两倍的置换换出两个长度为偶数的置换..
没了..
#include<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<string>
#include<time.h>
#include<math.h>
#include<memory>
#include<vector>
#include<bitset>
#include<fstream>
#include<stdio.h>
#include<utility>
#include<sstream>
#include<string.h>
#include<iostream>
#include<stdlib.h>
#include<algorithm>
using namespace std;
char a[135];
int b[35];
int main()
{
int t;
scanf("%d",&t);
int zu;
for (zu=0;zu<t;zu++)
{
scanf("%s",a+'A');
memset(b,0,sizeof(b));
char j;
for (j='A';j<='Z';j++)
{
if (a[j]!='#')
{
char now=j;
int cnt=0;
for (;;)
{
char temp=a[now];
a[now]='#';
now=temp;
cnt++;
if (now==j) break;
}
b[cnt]^=1;
}
}
int i;
for (i=2;i<=26;i+=2)
{
if (b[i])
{
puts("No");
break;
}
}
if (i==28)
{
puts("Yes");
}
}
return 0;
}
评论 (0)