1240 Unreliable Message
簡単な問題です。
各人の変換ルールの逆変換を作って変換経路の文字列を逆にたどるだけで解けます。
こういう簡単な問題でちまちま正答数を稼ぐのは小銭を稼ぐような楽しさがあるかも。
#include<stdio.h>
#include<string>
#include<iostream>
#include<algorithm>
std::string J(std::string& str){
int len=str.length();
if(len<2)return str;
return str[len-1]+str.substr(0,len-1);
}
std::string C(std::string& str){
int len=str.length();
if(len<2)return str;
return str.substr(1)+str[0];
}
std::string E(std::string& str){
int len=str.length();
std::string re;
int p2;
if(len<2)return str;
if(len%2==0){
p2=len/2;
re=str.substr(p2)+str.substr(0,p2);
}else{
p2=len/2+1;
re=str.substr(p2)+str[len/2]+str.substr(0,len/2);
}
return re;
}
void A(std::string& str){
int len=str.length();
char t;
for(int i=0;i<len/2;i++){
std::swap(str[i],str[len-i-1]);
}
}
void M(std::string& str){
char t;
for(int i=0;i<str.length();i++){
t=str[i];
if('0'<=t&&t<='9'){
str[i]=(t-'0'+1)%10+'0';
}
}
}
void P(std::string& str){
char t;
for(int i=0;i<str.length();i++){
t=str[i];
if('0'<=t&&t<='9'){
str[i]=((t-'0'+10)-1)%10+'0';
}
}
}
int main(){
std::string str,com;
int n;
std::cin>>n;
while(n--){
std::cin>>com>>str;
for(int i=com.length()-1;i>=0;i--){
char t=com[i];
if(t=='A')A(str);
if(t=='J')str=J(str);
if(t=='M')M(str);
if(t=='P')P(str);
if(t=='E')str=E(str);
if(t=='C')str=C(str);
}
std::cout<<str<<"\n";
}
}
最終更新:2012年07月19日 20:47