首页 > 代码库 > POJ 1026

POJ 1026

用了一点群论中的置换群的知识,仅是一点,找出循环节,取模即可。

初次接触群论,等做完余下一点东西后就系统一点学习组合数学的内容

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n;int chan[210];int partic[210],np;bool vis[210];char s[210];char ans[210];int main(){	int k;	while(scanf("%d",&n),n){		for(int i=1;i<=n;i++)		scanf("%d",&chan[i]);		while(scanf("%d",&k),k){			getchar();			gets(s+1);			memset(vis,false,sizeof(vis));			if(strlen(s+1)<n){				for(int i=strlen(s+1)+1;i<=n;i++)				s[i]=‘ ‘;				s[n+1]=‘\0‘;			}			for(int i=1;i<=n;i++){				np=0;				if(!vis[i]){					while(!vis[i]){						vis[i]=true;						partic[np++]=i;						i=chan[i];					}					for(int p=0;p<np;p++){						ans[partic[(p+k)%np]]=s[partic[p]];					}				}			}			ans[n+1]=‘\0‘;			cout<<ans+1<<endl;		}		cout<<endl;	}	return 0;}

  

POJ 1026