Cod sursă (job #542403)

Utilizator avatar mariabd Maria Burdila mariabd IP ascuns
Problemă Hex Compilator cpp | 2,63 kb
Rundă lasm_13_03_2020_cl_12c_a Status evaluat
Dată 13 mar. 2020 15:00:48 Scor 100
#include <stdio.h>
using namespace std;

int n;
char a[501][501];


struct p{
    short int x;
    short int y;
};
                                     
                                      
p t[501][501];
const int dx[]={-1,-1,0,0,1,1};
const int dy[]={0,1,-1,1,-1,0};


p rad (short int x, short int y)
{
    p r;
    if(t[x][y].x==0 && t[x][y].y==0)
    {
        r.x=x;
        r.y=y;
        return r;
    }
    r=rad(t[x][y].x,t[x][y].y);
    t[x][y]=r;
    return r;
}

bool tab(int x, int y)
{
    if(x<1 || x>n) return 0;
    if(y<1 || y>n) return 0;
    return 1;
}

int main()
{
    FILE *in,*out;
    in=fopen("hex.in","r");
    out=fopen("hex.out","w");
    int i,j,x,y,xv,yv,s;
    p r1,r2;
    bool gata=0;

    fscanf(in,"%d",&n);
    for(i=0;i<=n;i++)
        for(j=0;j<=n;j++)
            t[i][j].x=t[i][j].y=0;

    i=1;
    while(i<=n*n && !gata)
    {
        fscanf(in,"%d%d",&x,&y);
        if(i%2==1) s=1;
        else s=2;
        a[x][y]=s;

        r1=rad(x,y);
        for(j=0;j<6;j++)
        {
            xv=x+dx[j];
            yv=y+dy[j];
            if(tab(xv,yv) && a[xv][yv]==s)
            {
                r2=rad(xv,yv);
                if(r1.x!=r2.x || r1.y!=r2.y)
                    t[r2.x][r2.y]=r1;
            }
        }

        if(s==1)
        {
            if(y==1)
            {
                r2=rad(1,0);
                if(r1.x!=r2.x || r1.y!=r2.y)
                {
                    t[r1.x][r1.y].x=r2.x;
                    t[r1.x][r1.y].y=r2.y;
                }
            }
            if(y==n)
            {
                r2=rad(2,0);
                if(r1.x!=r2.x || r1.y!=r2.y)
                {
                    t[r1.x][r1.y].x=r2.x;
                    t[r1.x][r1.y].y=r2.y;
                }
            }
            if(rad(1,0).x == rad(2,0).x && rad(1,0).y == rad(2,0).y)
                gata=1;
        }
        if(s==2)
        {
            if(x==1)
            {
                r2=rad(0,1);
                if(r1.x!=r2.x || r1.y!=r2.y)
                {
                    t[r1.x][r1.y].x=r2.x;
                    t[r1.x][r1.y].y=r2.y;
                }
            }
            if(x==n)
            {
                r2=rad(0,2);
                if(r1.x!=r2.x || r1.y!=r2.y)
                {
                    t[r1.x][r1.y].x=r2.x;
                    t[r1.x][r1.y].y=r2.y;
                }
            }
            if(rad(0,1).x == rad(0,2).x && rad(0,1).y == rad(0,2).y)
                gata=1;
        }
        i++;
    }

    fprintf(out,"%d",i-1);
    return 0;
}