Pagini recente »
Monitorul de evaluare
|
Diferențe pentru utilizator/hortolomeieliza între reviziile 14 și 13
|
Istoria paginii utilizator/sculap1234321
|
Monitorul de evaluare
|
Cod sursă (job #542453)
Cod sursă (job
#542453)
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
int n, i, j, x, y, dreaptax, dreaptay, p[252004];
char a[502][502];
bool v[4][252004];
int dx[]={0, 1, 0, - 1, 1, - 1};
int dy[]={1, 0, - 1, 0, - 1, 1};
int fi(int x){
if (p[x] == 0)
return x;
return p[x] = fi(p[x]);
}
int main(){
ifstream fin("hex.in");
ofstream fout("hex.out");
fin>>n;
for (i = 1; i <= n * n; ++ i){
fin >> x >> y;
dreaptax = fi(x * (n + 1) + y);
if (x == 1)
//v[0][dreaptax] = 1;
if (x == n)
//v[1][dreaptax] = 1;
if (y == 1)
v[2][dreaptax] = 1;
if (y == n)
v[3][dreaptax] = 1;
a[x][y] = (i % 2) + 'a';
for (j = 0; j < 6; ++ j)
if (a[x + dx[j]][y + dy[j]] == a[x][y]){
dreaptay = fi((x + dx[j]) * (n + 1) + y + dy[j]);
if (dreaptax != dreaptay){
p[dreaptay] = dreaptax;
for (int l = 0; l < 4; ++ l)
if (v[l][dreaptay]) v[l][dreaptax] = 2;
else if (v[l][dreaptax])
v[l][dreaptay] = 1;
}
}
if ((i % 2 == 0 && v[0][dreaptax] && v[1][dreaptax]) || (i % 2 && v[2][dreaptax] && v[3][dreaptax])){
fout<<i;
return 0;
}
}
}