zoukankan      html  css  js  c++  java
  • LA3641置换群(A^2=B)

    /*LA3641
    置换群:
    对于置换B,问是否存在A^2=B?
    已经有存在的规律,总结如下:
    对于循环单元群B(这里之不能再细分)
    1、若元素个数为奇数,则一定存在A
    2、若元素个数为偶数,则两个不想交的群B1,B2,
    一定存在A^2=B1B2(这道题只要求判断是否存在,没有要求个数);
    3、对于循环群B=(B1)(B2)(B3)...(Bn)分解成单元群,
    存在A的“充分必要”是偶数元素个数的循环群个数是偶数
    */
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<stdlib.h>
    #include<math.h>
    #include<queue>
    #include<vector>
    #include<map>
    
    using namespace std;
    
    int t;
    int nums[30],vis[30];
    char B[30];
    int main(){
        cin>>t;
        while(t--){
            scanf("%s",B);
            memset(vis,0,sizeof(vis));
            memset(nums,0,sizeof(nums));
            for(int i=0;i<26;i++){//与书上思路不同,以B的顺序扫描
                int k=B[i]-'A';
                if (!vis[k]){
                    int cnt=0;
                    while (!vis[k]) {
                        vis[k]=1;
                        k=B[k]-'A';
                        cnt++;
                    }
                    nums[cnt]++;
                }
            }
            bool ans=true;
            for(int i=2;i<=26;i+=2)
                if (nums[i]%2!=0) ans=!ans;
            if(ans) cout<<"Yes
    "<<endl;else cout<<"No"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    结对编程之附加题:单元测试
    机器学习第二次作业
    第一次作业
    机器学习第二次作业
    机器学习第一次个人作业
    软工实践个人总结
    第08组 Beta版本演示
    第08组 Beta冲刺(5/5)
    第08组 Beta冲刺(4/5)
    第08组 Beta冲刺(3/5)
  • 原文地址:https://www.cnblogs.com/little-w/p/3570272.html
Copyright © 2011-2022 走看看