PKU 1026

原文链接:http://www.cnblogs.com/ACAC/archive/2010/07/25/1784833.html

题意:   给你长度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;
}

 

转载于:https://www.cnblogs.com/ACAC/archive/2010/07/25/1784833.html

上一篇:[p1063]能量项链


下一篇:202.快乐数