zoukankan      html  css  js  c++  java
  • poj 1721 CARDS 置换群

     没看到题目上说 仅一个循环因子.. 现在我还是没看到.....

     WA了好久, 一直用 置换群分解循环因子后,对每一个循环因子 其 阶数即为循环节. 之后无限WA..

     找了好久.才发现.  这里的置换, 每一次 double shuffer 后. 其循环因子顺序已经改变了.  我们使用循环因子的顺序是相对于最初的情况而言.

     所以这里不能够用循环因子来做.

     模拟其置换过程,找出其 置换循环 D,   对于置换X经过S次置换后得到Y,  则 Y再经过 D-S%D 次置换后又回到 X.

    View Code
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    #include<vector>
    using namespace std;
    
    const int N = 1010;
    
    int a[N], b[N],c[N], vis[N];
    
    int n, k, num;
    
    int init(){
        int cnt = 0;
        while( 1 )
        {
            for(int i = 1; i <= n; i++)
                b[i] = c[ c[i] ];
            cnt++;    
            bool flag = true;
            for(int i = 1; i <= n; i++)
                if( b[i] != a[i] )
                {    flag = false; break; }
            if(flag) break;    
            for(int i = 1; i <= n; i++)
                c[i] = b[i];
        }
        return cnt;
    }
    int main()
    {
        while( scanf("%d%d", &n,&k) != EOF)
        {
            for(int i = 1; i <= n; i++)
            {    
                scanf("%d", &a[i] );
                c[i] = a[i];
            }    
            int D = init();
    //        printf("D = %d\n", D);    
            D = D - k%D;    
            for(int i = 1; i <= D; i++)
            {
                for(int i = 1; i <= n; i++)
                    b[i] = a[ a[i] ];
                for(int i = 1; i <= n; i++)
                    a[i] = b[i];
            }
            for(int i = 1; i <= n; i++)
                printf("%d\n", a[i] );
        }
        return 0;
    }
  • 相关阅读:
    django查询今天,昨天,一周,分组统计月,年
    Rancher2.4.3 Rest API修改镜像地址
    Django-filter实现动态过滤与排序
    Python实现随机生成头像
    Python项目目录结构
    Django继承AbstractUser扩展字段
    Celery 监控方案
    Django项目配置快速启动
    Docker镜像分析工具dive
    Ddjango 多个app的urls配置
  • 原文地址:https://www.cnblogs.com/yefeng1627/p/2840379.html
Copyright © 2011-2022 走看看