Cod sursă (job #542453)

Utilizator avatar PascalSergiu Sergiu Pascal PascalSergiu IP ascuns
Problemă Hex Compilator cpp | 1,44 kb
Rundă Arhiva de probleme Status evaluat
Dată 13 mar. 2020 15:25:42 Scor 0
#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;
        }
    }
}