Nu aveti permisiuni pentru a descarca fisierul grader_test20.in

Cod sursa(job #2011123)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 15 august 2017 12:00:51
Problema Overlap Scor 56
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <cstdio>
#include <map>
using namespace std;
FILE *f=fopen("overlap.in","r");
FILE *g=fopen("overlap.out","w");
int N;
pair<int,int> A[805];
pair<int,int> V[805];
map<pair<int,int>,int> M;
int nxt[805];
int ant[805];
int cul[805];
bool viz[805];
int main()
{
    fscanf(f,"%d",&N);
    for(int i=1;i<=N;i++)
    {
        fscanf(f,"%d %d",&V[i].first,&V[i].second);
        M[V[i]]=i;
        A[i]=V[i];
    }
    for(int i=0;i<4;i++)
    {
        for(int j=1;j<=N;j++){swap(V[j].first,V[j].second);V[j].second*=-1;}
        for(int j=1;j<=N;j++)
        {

            bool ok=1;
            for(int k=1;k<=N;k++){cul[k]=0;nxt[k]=0;ant[k]=0;viz[k]=0;}
            for(int k=1;k<=N;k++)
            {
                int t=M[{A[j].first-V[1].first+V[k].first,A[j].second-V[1].second+V[k].second}];
                if(t){nxt[k]=t;ant[t]=k;}
            }
            for(int k=1;k<=N&&ok;k++)
            {
                int nr=0,ind=k;
                while(ant[ind]&&!viz[ant[ind]])
                    {viz[ind]=1;ind=ant[ind];}
                while(!cul[ind]&&ind)
                {
                    cul[ind]=nr%2+1;
                    nr++;
                    ind=nxt[ind];
                }
                if(nr%2==1)ok=0;
            }
            if(ok)
            {
                for(int i=1;i<=N;i++)
                    fprintf(g,"%d\n",cul[i]);
                return 0;
            }
        }
    }
    fclose(f);
    fclose(g);
    return 0;
}