现在的位置: 首页 > 综合 > 正文

poj 3128

2013年06月06日 ⁄ 综合 ⁄ 共 599字 ⁄ 字号 评论关闭

置换的应用。若一个置换B中所有的元素个数为偶数的循环节和它元素相等的循环节的个数为偶数个,就存在置换A使得A^2=B

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 const int maxn=30;
 6 char s[maxn];
 7 int vis[maxn],cou[maxn];
 8 int main()
 9 {
10     int n;
11     scanf("%d",&n);
12     while(n--)
13     {
14         memset(vis,0,sizeof(vis));
15         memset(cou,0,sizeof(cou));
16         scanf("%s",s);
17         int i,j;
18         for(i=0;i<26;i++) s[i]=s[i]-'A';
19         int tc,tot=0;
20         for(i=0;i<26;i++)
21         {
22             if(!vis[i])
23             {
24                 vis[i]=1;
25                 tc=1;
26                 j=s[i];
27                 while(j!=i)
28                 {
29                     vis[j]=1;
30                     j=s[j];
31                     tc++;
32                 }
33                 cou[tc]++;
34             }
35         }
36         for(i=2;i<=26;i+=2)
37             if(cou[i]%2)  break;
38         if(i<=26)printf("No\n");
39         else printf("Yes\n");
40     }
41     return 0;
42 }

 

抱歉!评论已关闭.