Cod sursa(job #2123379)

Utilizator AndreiD31Dragan Andrei AndreiD31 Data 6 februarie 2018 10:18:40
Problema Triang Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <fstream>
#include <cmath>

#include <algorithm>
using namespace std;
ifstream f("triang.in");
ofstream g("triang.out");

struct punct
{
    double x,y;
}v[3001];



int compare (punct A,punct B)
{
 if(A.x==B.x)return (A.y<B.y);
 return (A.x<B.x);
}
int n,i,p,u,mij,nr,j;
double x1,x2,yy1,r=sqrt(3),y2;
int main()
{
     f>>n;
     for(i=1;i<=n;i++)
     {
         f>>v[i].x>>v[i].y;
     }

     sort(v+1,v+n+1,compare);


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

             x1=(v[i].x+v[j].x)/2+r/2*(v[j].y-v[i].y);
             yy1=(v[i].y+v[j].y)/2+r/2*(v[i].x-v[j].x);

             x2=(v[i].x+v[j].x)/2+r/2*(v[i].y-v[j].y);
             y2=(v[i].y+v[j].y)/2+r/2*(v[j].x-v[i].x);



             p=j+1;u=n;

             while(p<=u)
             {

               mij=(p+u)/2;

               if(fabs(v[mij].x-x1)<=0.0001)
                {

                  if(fabs(v[mij].y-yy1)<=0.0001){nr++;break;}
                  else if(v[mij].y<yy1){p=mij+1;}
                  else {u=mij-1;}

                }

                else if(v[mij].x<x1){p=mij+1;}
                else {u=mij-1;}


             }



              p=j+1;u=n;

             while(p<=u)
             {

               mij=(p+u)/2;

               if(fabs(v[mij].x-x2)<=0.0001)
                {

                  if(fabs(v[mij].y-y2)<=0.0001){nr++;break;}
                  else if(v[mij].y<y2){p=mij+1;}
                  else {u=mij-1;}

                }

                else if(v[mij].x<x2){p=mij+1;}
                else {u=mij-1;}


             }




         }
     }
  g<<nr;
    return 0;
}