Cod sursa(job #1863591)

Utilizator mariusn01Marius Nicoli mariusn01 Data 31 ianuarie 2017 00:38:25
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<fstream>
#include<algorithm>
#include<cmath>
#define EPS 1e-12
#define DIM 1510
#define x first
#define y second
#define sin 0.8660254
#define cos 0.5
using namespace std;

pair<double, double> v[DIM];

double X1, Y11, X2, Y2;
double x1, y11, x2, y2, t, a, b, A, B, C, d;
int sol, n;

int egal(double a, double b) {
    double d = a-b;
    if (d <= EPS && d >= -EPS)
        return 1;
    return 0;
}

int cauta(double x, double y) {
    int st = 1, dr = n;
    while (st <= dr) {
        int mid = (st + dr)/2;
        if (egal(v[mid].x, x) && egal(v[mid].y, y)) {
            return 1;
        }
        if (v[mid].x < x || ( egal(v[mid].x, x) && v[mid].y < y ))
            st = mid+1;
        else
            dr = mid-1;
    }
    return 0;
}

int main(){
    ifstream fin ("triang.in");
    ofstream fout("triang.out");

    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>v[i].x>>v[i].y;
    sort(v+1,v+n+1);

    for (int i=1;i<n;i++)
        for (int j=i+1;j<=n;j++) {

            a = sqrt( (v[i].x - v[j].x) * (v[i].x - v[j].x) + (v[i].y - v[j].y) * (v[i].y - v[j].y) );
            X2 = v[i].x + (v[j].x - v[i].x) * cos - (v[j].y - v[i].y) * sin;
            Y2 = v[i].y + (v[j].x - v[i].x) * sin + (v[j].y - v[i].y) * cos;
            sol += cauta(X2, Y2);

            X2 = v[i].x + (v[j].x - v[i].x) * cos + (v[j].y - v[i].y) * sin;
            Y2 = v[i].y - (v[j].x - v[i].x) * sin + (v[j].y - v[i].y) * cos;
            sol += cauta(X2, Y2);

        }
    fout<<sol;
    return 0;
}