Pagini recente »
Clasament 2018_03_24_a_6_a
|
Rating TEODORESCU MARA BIANCA (marateodorescu11)
|
Istoria paginii runda/concursbkt11d
|
Istoria paginii runda/simulare_oni_2021/clasament
|
Cod sursă (job #420666)
Cod sursă (job
#420666)
#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;
}
}
}