POJ 1303 - Byte Me!
http://poj.org/problem?id=1303
概要
\(N\) 人の子と1人の親で8ビットの値で510ぴったりを狙うブラックジャックをやる。
子はヒットをせず、最初に配られたカードのみで勝負する。
自分は親であり、問題文で指定された規則に従って bytes あるいは nibbles の山から最大4回ヒットする。 ヒットの過程と、子との勝負の結果を Win!, Lose!, Bust! のいずれかで答える。
制約
- \(1 \le N \le N\)
解法
やるだけ。
poj/1303.cc1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 5 int read(const string& s) 6 { 7 int n = 0; 8 for (string::const_iterator it = s.begin(); it != s.end(); ++it) { 9 n = 2*n + *it-'0'; 10 } 11 return n; 12 } 13 14 int main() 15 { 16 for (string s; cin >> s && s != "ENDOFINPUT";) { 17 int N; 18 cin >> N; 19 string x, y; 20 cin >> x >> y; 21 int a = read(x) + read(y); 22 int m = 0; 23 for (int i = 0; i < N; i++) { 24 cin >> x; 25 m = max(m, read(x) + 255); 26 } 27 vector<int> bytes(4), nibbles(4); 28 for (int i = 0; i < 4; i++) { 29 cin >> x; 30 bytes[i] = read(x); 31 } 32 for (int i = 0; i < 4; i++) { 33 cin >> x; 34 nibbles[i] = read(x); 35 } 36 cin >> x; 37 38 cout << "HAND " << N << endl; 39 vector<int>::const_iterator it = bytes.begin(), jt = nibbles.begin(); 40 for (int i = 0; i < 4; i++) { 41 if (a >= m) { 42 break; 43 } else if (a < 382) { 44 a += *it; 45 ++it; 46 cout << "Byte me!" << endl; 47 } else if (a <= 500) { 48 a += *jt; 49 ++jt; 50 cout << "Nibble me!" << endl; 51 } else { 52 break; 53 } 54 } 55 if (a > 510) { 56 cout << "Bust!" << endl; 57 } else if (a >= m) { 58 cout << "Win!" << endl; 59 } else { 60 cout << "Lose!" << endl; 61 } 62 } 63 return 0; 64 }