poj1721CARDS

来源:互联网 发布:ziperello破解软件 编辑:程序博客网 时间:2024/06/08 00:31

置换群的题,加深了对置换群的理解。

#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>using namespace std;const int maxn = 2000;int n,s,count_num;int a[maxn],b[maxn],zz[maxn];int solve(){    for(int i=1; i<=n; i++)        b[i]=a[i];    count_num =0;    for(int i=1;; i++)    {        for(int j=1; j<=n; j++)        {            zz[j]=b[b[j]];        }        int tmp;        for(tmp=1; tmp<=n; tmp++)        {            if(zz[tmp]!=a[tmp])            break;        }        count_num++;        if(tmp>n)break;        for(int it=1; it<=n; it++)            b[it]=zz[it];    }    return count_num;}void just_do_it(int k){    for(int i=1; i<=k; i++)    {        for(int j=1; j<=n; j++)        {            zz[j]=a[a[j]];        }        for(int it=1; it<=n; it++)            a[it]=zz[it];    }    for(int i=1; i<=n; i++)        printf("%d\n",zz[i]);}int main(){    while(~scanf("%d%d",&n,&s))    {        for(int i=1; i<=n; i++)        {            scanf("%d",&a[i]);        }        int xh = solve();        int c=xh-s%xh;        just_do_it(c);    }    return 0;}


0 0
原创粉丝点击