水题,直接贴代码。
//poj 2041
//sep9
#include <iostream>
using namespace std;
char mode[128];
char ori[128],res[128];
int len;
void J()
{ ori[0]=res[len-1];for(int i=1;i<len;++i)ori[i]=res[i-1];
}
void C()
{ori[len-1]=res[0];for(int i=0;i<len-1;++i)ori[i]=res[i+1];
}
void E()
{int i;for(i=0;i<len/2;++i) ori[i]=res[i+(len+1)/2];if(len%2==1)ori[len/2]=res[len/2];for(i=(len+1)/2;i<len;++i)ori[i]=res[i-(len+1)/2];
}
void A()
{for(int i=0;i<len;++i)ori[i]=res[len-1-i];
}
void P()
{for(int i=0;i<len;++i)if(res[i]<='9'&&res[i]>='0')ori[i]=res[i]=='0'?'9':res[i]-1;else ori[i]=res[i];
}
void M()
{for(int i=0;i<len;++i)if(res[i]<='9'&&res[i]>='0')ori[i]=res[i]=='9'?'0':res[i]+1;else ori[i]=res[i];
}
int main()
{int i,n;scanf("%d",&n);while(n--){scanf("%s%s",mode,res);len=strlen(res);ori[len]='\0';for(i=strlen(mode)-1;i>=0;--i){if(mode[i]=='J')J();else if(mode[i]=='C')C();else if(mode[i]=='E')E();else if(mode[i]=='A')A();else if(mode[i]=='P')P(); else if(mode[i]=='M')M();strcpy(res,ori);}printf("%s\n",res);} return 0;
}