文字変換表を渡されて、対応する文字だけ置き換える。
mapにもって該当すれば置き換えるだけ。
#include<iostream> #include<map> using namespace std; int main(void){ int n,m; while(cin >> n, n != 0){ char c, d; map<char, char> tb; for(int i = 0; i < n; i++){ cin >> c >> d; tb[c] = d; } cin >> m; for(int i = 0; i < m; i++){ cin >> c; if(tb.find(c) != tb.end()) cout << tb[c]; else cout << c; } cout << endl; } return 0; }出力は改行するもんだと思ってた。騙された!
AOJ 0502
サイコロを指示通り転がして上面になった目の合計。
#include<iostream> #include<string> using namespace std; int main(void){ int a6, a5, a4, a1, a3, a2; string str; int n, temp; while(cin >> n, n != 0){ a1 = 1; a2 = 2; a3 = 3; a4 = 4; a5 = 5; a6 = 6; int ans = 1; for(int i = 0; i < n; i++){ cin >> str; if(str == "North"){ temp = a1; a1 = a2; a2 = a6; a6 = a5; a5 = temp; } if(str == "East"){ temp = a1; a1 = a4; a4 = a6; a6 = a3; a3 = temp; } if(str == "West"){ temp = a1; a1 = a3; a3 = a6; a6 = a4; a4 = temp; } if(str == "South"){ temp = a1; a1 = a5; a5 = a6; a6 = a2; a2 = temp; } if(str == "Right"){ temp = a2; a2 = a3; a3 = a5; a5 = a4; a4 = temp; } if(str == "Left"){ temp = a2; a2 = a4; a4 = a5; a5 = a3; a3 = temp; } ans += a1; } cout << ans << endl; } return 0; }全部の指示を丁寧に実装しました。a1~6をサイコロ形に書いてるのがまたひどい。
単にスパゲティーなだけやん?
AOJ 0503
隣にしか動かせないハノイの塔
#include式を再帰的に~とか一番小さいコップは無視出来るので~とか数学的過ぎてよく分からん。#include using namespace std; int solve(int, int, int); int main(void){ int n,m,l; while(cin >> n >> m, n != 0 && m != 0){ int ans = 0; int a[3] = {0}, temp; for(int i = 0; i < 3; i++){ cin >> l; for(int j = 0; j < l; j++){ cin >> temp; a[i] |= 1 << temp - 1; } } ans = min(solve(a[0], a[1], a[2]), solve(a[2], a[1], a[0])); if(ans > m) cout << -1 << endl; else cout << ans << endl; } return 0; } int solve(int a, int b, int c){ if(a == 0 && b == 0) return 0; if(c & 1) return solve(a >> 1, b >> 1, c >> 1); if(b & 1) return solve(c >> 1, b >> 1, a >> 1) + 1 + solve((a|b|c) >> 1, 0, 0); if(a & 1) return solve(a >> 1, b >> 1, c >> 1) + 2*solve((a|b|c) >> 1, 0, 0) + 2; }
最初はコップを位置からシミュレーションしようと思ったけどコードがスパゲティ過ぎて挫折。
あきらめてJOIの解説見に行きました。
というわけで2日間でこれだけといたので、後はとりあえずビットDPとかワーシャルフロイドとかunion find木とかだけやっとけば5完とかいけそう。DPもちょっと練習したい。
0 件のコメント:
コメントを投稿