Cod sursa(job #1065538)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 23 decembrie 2013 14:22:31
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.74 kb
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int NMAX = 1005;
const int BASE = 103;
const int MOD = 100009;
int N,M,i,j,r,x0,y0,x1,y1,x2,y2,x3,y3,dx,dy,mijx,mijy,SOL,ok;
struct Point {int x,y;} P[NMAX]; char S[100];
vector<pair<int,int> > V[MOD];
int main()
{
    freopen("patrate3.in","r",stdin);
    freopen("patrate3.out","w",stdout);
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
        scanf("%s",S+1); M=strlen(S+1);
        for(j=1;j<=M;j++) if(S[j]!='.') P[i].x=P[i].x*10+S[j]-'0';
        scanf("%s",S+1); M=strlen(S+1);
        for(j=1;j<=M;j++) if(S[j]!='.') P[i].y=P[i].y*10+S[j]-'0';
        P[i].x*=2; P[i].y*=2;
        r=(1LL*BASE*P[i].x+P[i].y)%MOD;
        V[r].push_back(make_pair(P[i].x,P[i].y));
    }
    for(i=1;i<N;i++)
        for(j=1;j<=N;j++)
            if(P[i].y<P[j].y)
            {
                x0=P[i].x; y0=P[i].y;
                x1=P[j].x; y1=P[j].y;
                mijx=x0+(x1-x0)/2;
                mijy=y0+(y1-y0)/2;
                dx=abs(mijx-x0);
                dy=abs(mijy-y0);
                x2=mijx+dy; y2=mijy-dx;
                x3=mijx-dy; y3=mijy+dx;

                r=(1LL*BASE*x2+y2)%MOD; ok=0;
                for(vector<pair<int,int> >::iterator it=V[r].begin();it!=V[r].end();it++)
                    if(it->first==x2 && it->second==y2) {ok=1; break;}
                if(!ok) continue;

                r=(1LL*BASE*x3+y3)%MOD; ok=0;
                for(vector<pair<int,int> >::iterator it=V[r].begin();it!=V[r].end();it++)
                    if(it->first==x3 && it->second==y3) {ok=1; break;}
                if(!ok) continue;

                SOL++;
            }
    printf("%d\n",SOL);
    return 0;
}