#include #include #include #include #define se second #define fi first #define mp make_pair #define pb push_back using namespace std; char step(vector> field, char turn, int left) { bool f = false; for (int i = 0; i < 3; i++) { if ((field[0][i] == field[1][i]) && (field[1][i] == field[2][i]) && (field[1][i] != '#')) f = true; if ((field[i][0] == field[i][1]) && (field[i][1] == field[i][2]) && (field[i][1] != '#')) f = true; } if ((field[0][0] == field[1][1]) && (field[1][1] == field[2][2]) && (field[0][0] != '#')) f = true; if ((field[0][2] == field[1][1]) && (field[1][1] == field[2][0]) && (field[0][2] != '#')) f = true; if (f) return 'l'; if (left == 0) return 'd'; bool w_flag = false; bool d_flag = false; bool l_flag = false; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (field[i][j] == '#') { field[i][j] = turn; char res; if (turn == 'X') { res = step(field, 'O', left - 1); } else { res = step(field, 'X', left - 1); } field[i][j] = '#'; if (res == 'w') w_flag = true; else if (res == 'd') d_flag = true; else l_flag = true; } } } if (l_flag) return 'w'; if (d_flag) return 'd'; return 'l'; } int main() { vector> field(3, vector(3)); for (vector& e : field) { string s; cin>> s; e[0] = s[0]; e[1] = s[1]; e[2] = s[2]; } char res = step(field, 'X', 3); if (res == 'w') cout << "Crosses win"; else if (res == 'd') cout << "Draw"; else cout << "Ouths win"; return 0; }

AltStyle によって変換されたページ (->オリジナル) /