Cod sursa(job #1973849)

Utilizator sichetpaulSichet Paul sichetpaul Data 26 aprilie 2017 07:49:09
Problema Triang Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <algorithm>
#define cos 0.500
#define sin 0.8660254
using namespace std;
int egal(double a,double b) {
  double dif=a-b;
  if (dif>=-0.001 && dif <=0.001) return 1;
  return 0;
}
struct punct {
  double x,y;
};
punct v[1501];
bool compar(punct a,punct b) {
   if (a.x==b.x) return a.y<b.y;
   return a.x<b.x;
}
int main()
{ int n,i,sol=0,j;
double a,b;
    ifstream f("triang.in");
    ofstream g("triang.out");
    f>>n;
    for (i=1;i<=n;++i)
        f>>v[i].x>>v[i].y;
    sort(v+1,v+n+1,compar);
    for (i=1;i<=n-1;++i)
    for (j=i+1;j<=n;++j) {
        a=v[i].x+(v[j].x-v[i].x)*cos+(v[j].y-v[i].y)*sin;
        b=v[i].y+(v[j].y-v[i].y)*cos-(v[j].x - v[i].x)*sin;
   int st=1,dr=n,mij;
     while (st<=dr) {
     mij=(st+dr)/2;
     if ((egal(v[mij].x,a)) && egal(v[mij].y,b)) {
         ++sol;
         break;
     }
     if ((egal(v[mij].x,a) && v[mij].y<b) || v[mij].x<a) st=mij+1;
     else dr=mij-1;
      }
        a=v[i].x+(v[j].x-v[i].x)*cos-(v[j].y-v[i].y)*sin;
        b=v[i].y+(v[j].y-v[i].y)*cos+(v[j].x - v[i].x)*sin;
     st=1;dr=n;
     while (st<=dr) {
     mij=(st+dr)/2;
     if ((egal(v[mij].x,a)) && egal(v[mij].y,b)) {
         ++sol;
         break;
     }
     if ((egal(v[mij].x,a) && v[mij].y<b) || v[mij].x<a) st=mij+1;
     else dr=mij-1;
      }
    }
      g<<sol/3;
    return 0;
}