poj 1721 CARDS (置换群)
2015-04-08 18:42
323 查看
求置换s次后的结果
#include<iostream> #include<math.h> #include<stdio.h> #include<algorithm> #include<string.h> #include<vector> #include<queue> #include<map> #include<set> #define B(x) (1<<(x)) using namespace std; typedef long long ll; void cmax(int& a,int b){ if(b>a)a=b; } void cmin(int& a,int b){ if(b<a)a=b; } void cmax(ll& a,ll b){ if(b>a)a=b; } void cmin(ll& a,ll b){ if(b<a)a=b; } void add(int& a,int b,int mod){ a=(a+b)%mod; } void add(ll& a,ll b,ll mod){ a=(a+b)%mod; } const int oo=0x3f3f3f3f; const int MOD=2012; const int maxn=1100; int a[maxn],b[maxn],c[maxn]; int n; int min_cir(){ int cnt=0; while(1){ cnt++; for(int i=1;i<=n;i++) c[i]=b[b[i]]; int f=1; for(int i=1;i<=n;i++) if(c[i]!=a[i]){ f=0; break; } if(f)break; for(int i=1;i<=n;i++) b[i]=c[i]; } return cnt; } int main(){ //freopen("E:\\read.txt","r",stdin); int k; while(scanf("%d %d",&n,&k)!=EOF){ for(int i=1;i<=n;i++){ scanf("%d",&a[i]); b[i]=a[i]; c[i]=a[i]; } int cnt=min_cir(); int l=cnt-k%cnt; while(l--){ 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; }
相关文章推荐
- 【POJ】1721 - CARDS(置换群)
- POJ-1721 CARDS 置换群分数幂运算
- POJ 1721-CARDS(置换群-单个循环置换幂运算 倒推)
- POJ 1721 - CARDS【置换群】
- POJ 1721 CARDS (置换群)
- POJ 1721 CARDS <置换群>
- poj 1721 CARDS 【置换群 】【求最小循环节 再由末序列 求 初序列】
- POJ 1721 CARDS(置换群)
- poj 1721 CARDS(置换群的幂运算)
- poj 1721 CARDS 置换群
- 【POJ 1721】CARDS(置换群)
- poj 1721 CARDS (置换群)
- poj 1721 CARDS(置换群)
- poj 1721 CARDS 洗牌机
- poj 1721 CARDS(置换)
- POJ 1721 CARDS(置换+循环节)
- POJ 1721 CARDS 置换群
- pku1721 CARDS(置换群的幂运算) ???
- [POJ 1721]CARDS
- poj1721 CARDS