日々精進

aikoと旅行とプログラミング

【AOJ 1240】Unreliable Messages

問題

Unreliable Message | Aizu Online Judge

ソースコード

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
using namespace std;

#define rep(i,n) for(int i = 0 ; i < n ; i++)

int main(){
  int n;
  
  cin >> n;
  
  rep(i,n){
    string messenger;
    string message;
    int len;

    cin >> messenger >> message;
    len = (int)message.length();
    int mid = len/2;
    for(int j = messenger.length()-1; j >= 0 ; j--){
      switch(messenger[j]){
        case 'C':
          message = string(message.substr(1) + message[0]);
          break;
        case 'J':
          message = string(message[len-1] + message.substr(0,len-1));
          break;
        case 'E':
          if(len%2 == 1) message = string(message.substr(mid+1,len) + message[mid] + message.substr(0, mid));
          else  message = string(message.substr(mid,len)+message.substr(0, mid));
          break;
        case 'A':
          reverse(message.begin(), message.end());
          break;
        case 'M':
          rep(k,len){
            if(isdigit(message[k])){
              int num = message[k]-'0';
              message[k] = '0' + (num+1)%10;
            }
          }
          break;
        case 'P':
           rep(k,len){
            if(isdigit(message[k])){
              int num = message[k]-'0';
              if(num==0) message[k]='9';
              else message[k] = '0' + (num-1)%10;
            }
          }         
      }
    }
    cout << message << endl;
  }
}

問題文通りにゴリゴリ実装した。