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 + -
显示快捷键?