[破碎的状态] [-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; }