http://acm.pku.edu.cn/JudgeOnline/problem?id=1107

http://acm.pku.edu.cn/JudgeOnline/images/1107/1107_1.png

http://acm.pku.edu.cn/JudgeOnline/images/1107/1107_2.gif

Код:
#include<stdio.h>
#include<string.h>

int main()
{
	while(1)
	{
char tmp[81],ch;
char s[81];
int mark[81];
int i,k1,k2,k3,j,t,k;
scanf("%d%d%d",&k1,&k2,&k3);
if(!k1 && !k2 && !k3)break;
scanf("%s",s);
memset(tmp,0,sizeof(char)*81);
for(i=0;i<3;i++)
{
	t=0;
	memset(mark,0,sizeof(int)*81);
	if(i==0)
	{
for(j=0;j<strlen(s);j++)if(s[j]>='a' && s[j]<='i'){tmp[t++]=s[j];mark[j]=1;}t--;
for(j=0;j<k1;j++)
{
	ch=tmp[t];
	for(k=t;k>=0;k--)tmp[k]=tmp[k-1];
	tmp[0]=ch;
}
t=0;
for(j=0;j<strlen(s);j++)if(mark[j])s[j]=tmp[t++];
	}
	else if(i==1)
	{
for(j=0;j<strlen(s);j++)if(s[j]>='j' && s[j]<='r'){tmp[t++]=s[j];mark[j]=1;}t--;
for(j=0;j<k2;j++)
{
	ch=tmp[t];
	for(k=t;k>=0;k--)tmp[k]=tmp[k-1];
	tmp[0]=ch;
}
t=0;
for(j=0;j<strlen(s);j++)if(mark[j])s[j]=tmp[t++];
	}
	else
	{
for(j=0;j<strlen(s);j++)if((s[j]>='s' && s[j]<='z') || s[j]=='_'){tmp[t++]=s[j];mark[j]=1;}t--;
for(j=0;j<k3;j++)
{
	ch=tmp[t];
	for(k=t;k>=0;k--)tmp[k]=tmp[k-1];
	tmp[0]=ch;
}
t=0;
for(j=0;j<strlen(s);j++)if(mark[j])s[j]=tmp[t++];
	}
}
printf("%s\n",s);
	}
	return 0;
}