「AOJ1231~1240」の編集履歴(バックアップ)一覧はこちら

AOJ1231~1240」(2012/07/19 (木) 20:47:18) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

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

表示オプション

横に並べて表示:
変化行の前後のみ表示: