PKU 1026
作者:互联网
原文链接:http://www.cnblogs.com/ACAC/archive/2010/07/25/1784833.html
#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;
}
题意: 给你长度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
标签:1026,PKU,s2,s1,len,while,202,scanf 来源: https://blog.csdn.net/weixin_30399155/article/details/99238581