[AtCoder] ARC 109 C – Large RPS Tournament
問題
方針
参加者が出す手は周期性を持ち、最初に出す手は周期 \( n \) で変わります。ここで、\( T_0 = ss \) とします。ここで、\( f(t) \) を文字列 \( t \) を出す参加者で勝利した文字列とします。\( T_i = f(T_{i – 1})f(T_{i – 1})\) とすると、\( T_k \) の先頭の文字列が答えとなります。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; // (int) P < R < S char winner(char c1, char c2) { if (c1 == c2) return c1; if (c1 > c2) { swap(c1, c2); } // c1 < c2 if (c1 == 'P') { if (c2 == 'R') return 'P'; else return 'S'; } else { return 'R'; } } int main() { int n, k; string s; cin >> n >> k >> s; s = s + s; for (int i = 0; i < k; i++) { string t = ""; for (int j = 0; j < 2 * n; j++) { t += winner(s[2 * j], s[2 * j + 1]); } s = t + t; cout << s << "\n"; } cout << s[0] << "\n"; return 0; }
感想
あまり理解していません。
ディスカッション
コメント一覧
まだ、コメントがありません