ABC045 - B 3人でカードゲームイージー|AtCoder
B: 3人でカードゲームイージー / Card Game for Three (ABC Edit) - AtCoder Beginner Contest 045 | AtCoder を解きました。
題意:
・Aさん、Bさん、Cさんの3人でするカードゲーム。
・Aさんのターンからゲームは始まり、各自持っているカードに書かれている
a, b, c それぞれの人のターンになる。
・カードの順序は入れ替え不可。
・ターンが来たら先頭から1枚カードを捨てれる。
・自分のターンでカードを 1 枚も持っていなければ、その人が勝ち(ゲーム終了)。
( 細かい制約は問題文へ )
解法:
問題文通りに実装したら解けました。
Aさん、Bさん、Cさんの持つカード数にバラ付きがあるので、それぞれ別のカウンタを用意したぐらいです。
(もっと簡潔な解き方があるかも知れません...)
計算量 O( |Sa| + |Sb| + |Sc| )
#include <bits/stdc++.h> using namespace std; struct cww{cww(){ios::sync_with_stdio(false);cin.tie(0);}}star; int main() { string A, B, C; cin >> A >> B >> C; string next; next.push_back( A[ 0 ] ); int a{}, b{}, c{}; while( true ) { if( next == "a" ) { if( A.empty() ) { cout << "A" << endl; break; } next = *A.begin(); A.erase( A.begin() ); a++; } if( next == "b" ) { if( B.empty() ) { cout << "B" << endl; break; } next = *B.begin(); B.erase( B.begin() ); b++; } if( next == "c" ) { if( C.empty() ) { cout << "C" << endl; break; } next = *C.begin(); C.erase( C.begin() ); c++; } } return 0; }