Cod sursa(job #2498550)

Utilizator IancuVladIancu Vlad IancuVlad Data 24 noiembrie 2019 00:46:24
Problema Triang Scor 40
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <limits.h>
const int NMax = 1505;
const double EPSILON = 0.001;
typedef struct Point Point;
struct Point {
    double x,y;
};
Point points[1505];
int N = 0;
double sqdist(Point p1, Point p2);
double modul(double a);
int main()
{

    FILE* fin = fopen("triang.in", "r");
    FILE* fout = fopen("triang.out", "w");
    unsigned int count = 0;
    int i,j,k;
    fscanf(fin,"%d",&N);
    for(i = 0; i < N; i++) { //Pentru fiecare punct nou citit verifica toate combinatiile dintre el si punctele precedente
        fscanf(fin,"%lf %lf", &(points[i].x), &(points[i].y) );
        if(i < 2) continue;
        for(j = 0; j < i - 1;j++) {
            for(k = j + 1; k < i;k++) {
                if(echilateral(points[i], points[j], points[k]))
                    count++;
            }
        }

    }
    fprintf(fout,"%u",count);

    fclose(fin);
    fclose(fout);
    return 0;
}

int echilateral(Point p1, Point p2, Point p3) {
    if(p1.x == p2.x && p1.y == p2.y) return 0;
    if(p1.x == p3.x && p1.y == p3.y) return 0;
    if(p2.x == p3.x && p2.y == p3.y) return 0;

    double a = sqdist(p1, p2);
    double b = sqdist(p1, p3);
    double c = sqdist(p2, p3);

    if(fabs(a-b) * 1.0 > EPSILON) return 0;
    if(fabs(a-c) * 1.0 > EPSILON) return 0;
    if(fabs(b-c) * 1.0 > EPSILON) return 0;

    return 1;

}

double sqdist(Point p1, Point p2) {
    return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y);
}
double modul(double a) {
    if(a > 0) return a;
        else return -a;
}