http://acm.pku.edu.cn/JudgeOnline/problem?id=1026
Код:
#include <stdio.h> #include <string.h> char ss[2][210]; int code[210]; int change[210]; int n; int time; int main() { int i,j,k,l; scanf("%d",&n); while (n) { for (i = 0; i < n; i++) { scanf("%d",&code[i]); code[i]--; } memset(change,0,sizeof(change)); for (i = 0; i < n; i++) { j = i; k = 0; do { j = code[j]; k++; } while (j != i); change[i] = k; } scanf("%d",&time); while (time) { getchar(); memset(ss,0,sizeof(ss)); gets(ss[0]); j = strlen(ss[0]);l=0; while (ss[0][j-1] == ' ' || ss[0][j-1] == '\n') { j--; ss[0][j] = '\0'; if (j == 0) break; } while (j < n) { ss[0][j] = ' '; ss[0][++j] = '\0'; } for (i = 0; i < n; i++) { l = time % change[i]; j = i; for ( k = 1; k <= l; k++) j = code[j]; ss[1][j] = ss[0][i]; } printf("%s\n",ss[1]); scanf("%d",&time); } printf("\n"); scanf("%d",&n); } return 0; }