您的位置:首页 > 其它

POJ 1026 Cipher(置换群)

2012-10-18 15:24 381 查看
题目链接

以前做过置换群的题目,基本上都是一个样,这个题,数据不大,乱搞即可,注意换行,贡献一次PE。

#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int p[501],o[501],z;
void dfs(int i)
{
if(!o[i])
{
o[i] = 1;
z ++;
dfs(p[i]);
o[i] = z;
}
else
{
return ;
}
}
int main()
{
int i,n,m,num,temp,len;
char s1[301],s2[301];
while(scanf("%d",&n)!=EOF)
{
if(n == 0) break;
memset(o,0,sizeof(o));
for(i = 1; i <= n; i ++)
{
scanf("%d",&p[i]);
}
for(i = 1;i <= n;i ++)
{
z = 0;
if(!o[i])
dfs(p[i]);
}
for(;;)
{
scanf("%d%*c",&m);
if(m == 0) break;
gets(s1);
len = strlen(s1);
for(i = len;i <= n-1;i ++)
{
s1[i] = ' ';
}
for(i = 0;i <= n-1;i ++)
{
num = m%o[i+1];
temp = i+1;
while(num != 0)
{
temp = p[temp];
num --;
}
s2[temp-1] = s1[i];
}
s2
= '\0';
printf("%s\n",s2);
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: