1240 Unreliable Message

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1240
文字列を受け取ると一定のルールで変換して次の人に渡す人たちが6人いる。
各人が文字列を受け取った順番と変換後の文字列が渡されるので元の文字列を計算せよ。

簡単な問題です。
各人の変換ルールの逆変換を作って変換経路の文字列を逆にたどるだけで解けます。
こういう簡単な問題でちまちま正答数を稼ぐのは小銭を稼ぐような楽しさがあるかも。



#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";
}
}

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2012年07月19日 20:47