Cod sursă (job #420665)

Utilizator avatar schimbatorlaura keem keem schimbatorlaura IP ascuns
Problemă Hex Compilator cpp | 1.19 kb
Rundă Arhiva de probleme Status evaluat
Dată 16 ian. 2019 20:06:20 Scor 100
#include <bits/stdc++.h>
#define Nmax 502
using namespace std;
int n, i, j, x, y, rx, ry, t[Nmax * Nmax];
int dx[] = {0, 1, 0, - 1, 1, - 1};
int dy[] = {1, 0, - 1, 0, - 1, 1};
char a[Nmax][Nmax];
bool w[4][Nmax * Nmax];
int rad(int x){
	if (t[x] == 0)	return x;
	return t[x] = rad(t[x]);
}
int main(){
	freopen("hex.in", "r", stdin);
	freopen("hex.out", "w", stdout);
	scanf("%d", &n);
	for (i = 1; i <= n * n; ++ i){
					scanf("%d %d", &x, &y);
					rx = rad(x * (n + 1) + y);
					if (x == 1) w[0][rx] = 1;
					if (x == n) w[1][rx] = 1;
					if (y == 1) w[2][rx] = 1;
					if (y == n) w[3][rx] = 1;
 
					a[x][y] = (i % 2) + 'a';

					for (j = 0; j < 6; ++ j)
						if (a[x + dx[j]][y + dy[j]] == a[x][y]){
													ry = rad((x + dx[j]) * (n + 1) + y + dy[j]);
													if (rx != ry){
																t[ry] = rx;
																for (int l = 0; l < 4; ++ l)
																				if (w[l][ry]) w[l][rx] = 1;
																						else if (w[l][rx]) w[l][ry] = 1;
																	}
																}
	if ((i % 2 == 0 && w[0][rx] && w[1][rx]) || (i % 2 && w[2][rx] && w[3][rx])){
																			printf("%d", i);
return 0;
																					}
									}
}