2818.cpp
来自「poj的几道题」· C++ 代码 · 共 97 行
CPP
97 行
#include<iostream>
#include<string>
using namespace std;
int tag[202][4];
int yuan[202];
int xunhuan[202][202];
string mubiao;
string cc;
char c;
int fenpei(int n)
{
int i,j,k;
for(i=1;;i++)
if(xunhuan[i][0]==0) {xunhuan[i][1]=n;tag[n][2]=1;j=2;break;}
while(1)
{
if(yuan[xunhuan[i][j-1]]==xunhuan[i][1])
{
for(k=1;k<j;k++)
{
tag[xunhuan[i][k]][0]=j-1;
tag[xunhuan[i][k]][1]=i;
tag[xunhuan[i][k]][2]=k;
}
xunhuan[i][0]=j-1;
break;
}
else
{
xunhuan[i][j]=yuan[xunhuan[i][j-1]];
j++;
}
}
return 0;
}
int gengxin(int x,int y,int z,int w,int u)
{
int ta;
ta=z%xunhuan[x][0]; ta=(w+ta)%xunhuan[x][0];
if(ta==0) ta=xunhuan[x][0];
mubiao[tag[xunhuan[x][ta]][3]-1]=cc[u-1];
return 0;
}
int qingkong()
{
int i,j;
for(i=0;i<=201;i++)
{
yuan[i]=0;
for(j=0;j<=201;j++)
{
if(j<=3) tag[i][j]=0;
xunhuan[i][j]=0;
}
}
return 0;
}
int main()
{
int n,i,j,k;
while(cin>>n)
{
if(n==0) break;
for(i=1;i<=n;i++)
{
cin>>yuan[i];
tag[yuan[i]][3]=i;
if(yuan[i]==i) tag[i][0]=1;
}
for(i=1;i<=n;i++)
if(tag[i][0]==0) fenpei(i);
getchar();
while(cin>>k)
{
if(k==0) {cout<<endl;qingkong();break;}
getchar();
cc="";
mubiao="";
while(1)
{
c=getchar();
if(c==10) break;
cc+=c;
}
while(cc.length()<n)
cc+=' ';
mubiao=cc;
for(i=0;i<n;i++)
if(tag[i+1][0]!=1)
gengxin(tag[i+1][1],i+1,k,tag[i+1][2],tag[i+1][3]);
cout<<mubiao<<endl;
}
}
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?