POJ-1051, LiveArchive-2282, TJU-1558, ZOJ-1068 : P,MTHBGWB
問題概要
モールス信号を使った簡単な暗号をデコードする問題。
解法
ルールに従って実装するだけ。
acceptされたコード
大昔に書いたもの
#include <cstdio> #include <cstdlib> #include <cmath> #include <climits> #include <cfloat> #include <map> #include <utility> #include <set> #include <iostream> #include <memory> #include <string> #include <vector> #include <algorithm> #include <functional> #include <sstream> #include <complex> #include <stack> #include <queue> #include <numeric> #include <iomanip> #define REP(i,n) for(i=0; i < (n); i++) #define REPONE(i, n) for(i=1; i <= (n); i++) #define ITER(c) __typeof((c).begin()) #define EACH(c,it) for(ITER(c) it =(c).begin(); it!=(c).end(); it++) #define SZ(c) ((int) (c).size()) #define ALL(c) c.begin(), c.end() #define SUM(c) accumulate(ALL(c), 0) #define EXIST(c,v) (find(ALL(c), (v)) != (c).end()) #define PB push_back #define MP make_pair using namespace std; static const double EPS = 1e-9; static const double PI = 3.141592653589793238462643383279; typedef long long ll; template<class T> char search(T st, T end, string tar) { for(T it=st; it!=end; it++){ if(it->second == tar) return it->first; } return 0; } int main(){ map<char, string> dict; dict['A'] = ".-"; dict['B'] = "-..."; dict['C'] = "-.-."; dict['D'] = "-.."; dict['E'] = "."; dict['F'] = "..-."; dict['G'] = "--."; dict['H'] = "...."; dict['I'] = ".."; dict['J'] = ".---"; dict['K'] = "-.-"; dict['L'] = ".-.."; dict['M'] = "--"; dict['N'] = "-."; dict['O'] = "---"; dict['P'] = ".--."; dict['Q'] = "--.-"; dict['R'] = ".-."; dict['S'] = "..."; dict['T'] = "-"; dict['U'] = "..-"; dict['V'] = "...-"; dict['W'] = ".--"; dict['X'] = "-..-"; dict['Y'] = "-.--"; dict['Z'] = "--.."; dict['_'] = "..--"; dict[','] = ".-.-"; dict['.'] = "---."; dict['?'] = "----"; int n; cin >> n; int i, j, cur; vector<int> nums; string line, ans; string enc; REPONE(i,n){ nums.clear(); enc = ""; cin >> line; REP(j,SZ(line)){ enc = enc + dict[line[j]]; nums.PB(SZ(dict[line[j]])); } reverse(ALL(nums)); ans = ""; cur = 0; REP(j,SZ(nums)){ ans = ans + string(1,search(ALL(dict),enc.substr(cur, nums[j]))); cur += nums[j]; } cout << i << ": " << ans << endl; } return 0; }