Pagini recente » Cod sursa (job #1328245) | Cod sursa (job #1778980) | Cod sursa (job #105240) | Cod sursa (job #1417082) | Cod sursa (job #1876467)
#include <fstream>
#define sinus 0.8660254
#define cosinus 0.5
#define nmax 1505
#define eps 0.0001
using namespace std;
ifstream f("triang.in");
ofstream g("triang.out");
struct point{double x;double y;} v[nmax];
double x,y,a,b;
int sol,n;
int egal(double a,double b)
{
double dif=a-b;
if (dif>=-eps&&dif<=eps)
return 1;
return 0;
}
int searching(int start,double x,double y)
{
int st=start,dr=n;
while (st<=dr) {
int mid=(st+dr)>>1;
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()
{
int i,j;
f>>n;
for (i=1;i<=n;i++)
f>>v[i].x>>v[i].y;
for (i=1;i<n;i++)
for (j=i+1;j<n;j++) {
x=v[j].x-v[i].x;
y=v[j].y-v[i].y;
a=v[i].x+x*cosinus-y*sinus;
b=v[i].y+x*sinus+y*cosinus;
sol+=searching(j+1,a,b);
a=v[i].x+x*cosinus+y*sinus;
b=v[i].y-x*sinus+y*sinus;
sol+=searching(j+1,a,b);
}
g<<sol<<'\n';
return 0;
}