///置换群,比1026要简单很多 #include<stdio.h> #include<string.h> char s[85],r[85]; int f[85],a[3],num[3],len; int rotate(int c,int k) { int i,t=0; i=c; while(t!=k) { i++; if(i>len-1) i=0; if(f[i]==f[c]) t++; } r[i]=s[c]; return 0; } int main() { while(scanf("%d%d%d",&a[0],&a[1],&a[2])==3) { if(a[0]==0&&a[1]==0&&a[2]==0) break; getchar(); memset(f,0,sizeof(f)); gets(s); int i; len=strlen(s); num[0]=num[1]=num[2]=0; for(i=0;i<len;i++) { if(s[i]>='a'&&s[i]<='i') { f[i]=1; num[0]++; } else if(s[i]>='j'&&s[i]<='r') { f[i]=2; num[1]++; } else { f[i]=3; num[2]++; } } ///注意num[i]为0的情况 for(i=0;i<len;i++) { if(f[i]==1) { if(num[0]) rotate(i,a[0]%num[0]); } else if(f[i]==2) { if(num[1]) rotate(i,a[1]%num[1]); } else { if(num[2]) rotate(i,a[2]%num[2]); } } r[len]='/0'; puts(r); } }