PKU 1026

题意:   给你长度n的一组序列a[i]  然后k操作次数 再给你一组字符串   字符串长度不足n的后面补零

           操作:把字符在i位置的放到a[i]上   如此操作k次

方法:   直接模拟肯定TLE

    求字符串整体周期T k=k%T  k还是很大 超时

            求每个字符串的周期 T[i]   然后 k=k%T[i]

 

#include<stdio.h>
#include
<string.h>
int main()
{
int i,j,k;
int n,len;
char s1[202],s2[202],c;
int a[202],b[202];
int temp,t;
while(scanf("%d",&n)!=EOF && n)
{
for(i=1;i<=n;i++)
scanf(
"%d",&a[i]);
for(i=1;i<=n;i++)
{
t
=i;
b[i]
=1;
while(a[t]!=i)
{
t
=a[t];
b[i]
++;
}
}
scanf(
"%d",&k);
while(k!=0)
{
scanf(
"%c",&c);
gets(s1);
len
=strlen(s1);
if(len<n)
{
for(i=len;i<n;i++)
{
s1[i]
=' ';
}
s1[n]
='\0';
}
for(i=0;i<n;i++)
{
temp
=k%b[i+1];
t
=i+1;
while(temp--)
t
=a[t];
s2[t
-1]=s1[i];
}
s2[n]
='\0';
puts(s2);

scanf(
"%d",&k);
}
printf(
"\n");
}
return 0;
}

 

posted on 2010-07-25 21:04  keep going  阅读(291)  评论(0编辑  收藏  举报