Thứ Năm, 10 tháng 1, 2019

UVa 00141 - The Spot Game (simulation, pattern check)

Link: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=77
Sol:
#include <iostream>
#include <set>
using namespace std;
int main() {
int n;
int x, y;
char move;
bool winner;
int playerWin;
int playerWinMove;
while(true) {
cin >> n;
if (n == 0) break;
string grid(n * n, '0');
string grid90(n * n, '0');
string grid180(n * n, '0');
string grid270(n * n, '0');
winner = false;
set<string> movesSoFar;
for (int i = 0; i < 2 * n; i++) {
cin >> x >> y >> move;
if (winner) continue;
--x, --y;
char m = (move == '+')? '1' : '0';
grid[x * n + y] = m;
if (movesSoFar.find(grid) != movesSoFar.end()) {
winner = true;
playerWin = 2 - (i % 2);
playerWinMove = i + 1;
continue;
}
grid90[y * n + (n - x - 1)] = m;
grid180[(n - x - 1) * n + (n - y - 1)] = m;
grid270[(n - y - 1) * n + x] = m;
movesSoFar.insert(grid);
movesSoFar.insert(grid90);
movesSoFar.insert(grid180);
movesSoFar.insert(grid270);
}
if (winner)
cout << "Player " << playerWin << " wins on move " << playerWinMove << endl;
else
cout << "Draw" << endl;
}
}

Không có nhận xét nào:

Đăng nhận xét

Bài G - Educatioal Round 62

Đề bài: Bạn được cho 1 đồ thị vô hướng đặc biệt. Nó bao gồm $2n$ đỉnh được đánh số từ 1 đến 2n. Dưới đây là một số đặc tính của đồ thị: + ...