Cod sursa(job #1731197)

Utilizator GoogalAbabei Daniel Googal Data 18 iulie 2016 15:29:25
Problema Patrate 3 Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <vector>
#include <cmath>
#define MOD 100013
#define DIM 1005*502

using namespace std;

ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
struct point{
    int x,y;
}v[1005];
struct segment{
    double angle;
    long long length;
    point a,b;
};
long long int squaredist(point a,point b){
    return 1LL*(a.x-b.x)*(a.x-b.x)+1LL*(a.y-b.y)*(a.y-b.y);
}
int Area(point p1,point p2,point p3){
    return (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y);
}
vector <segment> H[MOD];
int N,nr;
int SquaresCount;
int main(){
    fin>>N;
    for(int i=1;i<=N;i++){
        int x,y;
        char c;
        fin>>x>>c>>y;
        v[i].x=x*10000+y;
        fin>>x>>c>>y;
        v[i].y=x*10000+y;
    }
    for(int i=1;i<N;i++)
        for(int j=i+1;j<=N;j++){
            segment x;
            x.angle=(v[i].y-v[j].y)/(double)(v[i].x-v[j].x);
            x.length=1LL*squaredist(v[i],v[j]);
            x.a=v[i];
            x.b=v[j];
            int mod=x.length%MOD;
            for(int d=0;d<H[mod].size();d++)
                if(x.angle==H[mod][d].angle && x.length==H[mod][d].length){
                    if(x.length==min(squaredist(x.a,H[mod][d].a),squaredist(x.a,H[mod][d].b)))
                        SquaresCount++;
                }
            H[mod].push_back(x);
        }
    fout<<SquaresCount/2<<"\n";
}