Cod sursa(job #1901712)

Utilizator cipri321Marin Ciprian cipri321 Data 4 martie 2017 10:39:46
Problema Patrate 3 Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.28 kb
#include <fstream>
#include <algorithm>
#include <cstring>
#include <set>
#include <string>
using namespace std;
struct PUNCT
{
    int x,y;
};
ifstream fi("patrate3.in");
ofstream fo("patrate3.out");
int compar(PUNCT A,PUNCT B)
{
    if(A.x<B.x)
        return 1;
    if(A.x==B.x && A.y<B.y)
        return 1;
    return 0;
}
set<string> S;
string a;
int n;
PUNCT A[1001],P,Q;
int i,j;
int rez;
double x,y;
char X[100],Y[100];
int s;
string cod(PUNCT A,PUNCT B, PUNCT C, PUNCT D)
{
    string rez;
    PUNCT X[5];
    X[0]=A;
    X[1]=B;
    X[2]=C;
    X[3]=D;
    sort(X,X+4,compar);
    for(int i=0;i<4;i++)
    {
        string a;
        while(X[i].x>0)
        {
            a+=(X[i].x%10+'0');
            X[i].x/=10;
        }
        while(X[i].y>0)
        {
            a+=(X[i].y%10+'0');
            X[i].y/=10;
        }
        rez+=a;
    }
    return rez;
}
int main()
{
    fi>>n;
    for(i=1;i<=n;i++)
    {
        fi>>X>>Y;
        s=strlen(X);
        for(j=0;j<s;j++)
            if(X[j]>='0' && X[j]<='9')
                A[i].x=A[i].x*10+(X[j]-'0');
        s=strlen(Y);
        for(j=0;j<s;j++)
            if(Y[j]>='0' && Y[j]<='9')
                A[i].y=A[i].y*10+(Y[j]-'0');
    }
    sort(A+1,A+n+1,compar);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            if(i!=j)
            {
                P.x=A[i].x-(A[j].y-A[i].y);
                P.y=A[i].y+(A[j].x-A[i].x);
                Q.x=A[j].x+(A[i].y-A[j].y);
                Q.y=A[j].y-(A[i].x-A[j].x);
                if(binary_search(A+1,A+n+1,P,compar)&&binary_search(A+1,A+n+1,Q,compar))
                {
                    rez++;
                    a=cod(A[i],A[j],P,Q);
                    S.insert(a);
                }
                P.x=A[i].x+(A[j].y-A[i].y);
                P.y=A[i].y-(A[j].x-A[i].x);
                Q.x=A[j].x-(A[i].y-A[j].y);
                Q.y=A[j].y+(A[i].x-A[j].x);
                if(binary_search(A+1,A+n+1,P,compar)&&binary_search(A+1,A+n+1,Q,compar))
                {
                    rez++;
                    rez++;
                    a=cod(A[i],A[j],P,Q);
                    S.insert(a);
                }
            }
    fo<<S.size();
    fi.close();
    fo.close();
    return 0;
}