Pagini recente » Cod sursa (job #1401451) | Cod sursa (job #274157) | Cod sursa (job #2626613) | Cod sursa (job #1482578) | Cod sursa (job #736401)
Cod sursa(job #736401)
#include<iostream>
#include<fstream>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
#define mod 1001
struct punct {
long double x,y;
};
vector <punct> v[mod];
punct a[1001];
inline bool cmp(const punct a, const punct b)
{
return a.y<=b.y;
}
inline void adauga(punct x)
{
int k;
k=(int)(x.x+x.y)%mod;
if(k<0)
k=-k;
v[k].push_back(x);
}
inline int compara(long double a, long double b)
{
int x,y;
x=a;
y=b;
if(x==y)
return 1;
return 0;
}
inline int cauta(punct x)
{
int n,i,k;
k=(int)(x.x+x.y)%mod;
if(k<0)
k=-k;
n=v[k].size()-1;
for(i=0;i<=n;i++) {
if((compara(v[k][i].x,x.x))&&(compara(v[k][i].y,x.y)))
return 1;
}
return 0;
}
int main ()
{
int n,i,j,nr;
double d,b;
punct x,y;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
f>>n;
for(i=1;i<=n;i++) {
f>>a[i].x>>a[i].y;
adauga(a[i]);
}
sort(a+1,a+n+1,cmp);
for(i=1;i<=n;i++)
cout<<a[i].x<<" "<<a[i].y<<endl;
f.close();
nr=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++) {
if(a[i].x>=a[j].x) {
x.y=a[j].y-(a[j].x-a[i].x);
d=(double)((a[i].x-a[j].x)*(a[i].x-a[j].x)+(float)(a[i].y-a[j].y)*(a[i].y-a[j].y));
b=sqrt(d-(a[j].y-x.y)*(a[j].y-x.y));
x.x=a[j].x-b;
if(x.x<a[j].x)
x.x=a[j].x+b;
y.y=a[i].y-(a[j].x-a[i].x);
b=sqrt(d-(a[i].y-y.y)*(a[i].y-y.y));
y.x=a[i].x-b;
if(y.x<a[i].x)
y.x=a[i].x+b;
if((cauta(x))&&(cauta(y)))
nr++;
x.y=a[j].y+(a[j].x-a[i].x);
d=(double)((a[i].x-a[j].x)*(a[i].x-a[j].x)+(float)(a[i].y-a[j].y)*(a[i].y-a[j].y));
b=sqrt(d-(a[j].y-x.y)*(a[j].y-x.y));
x.x=a[j].x-b;
if(x.x>a[j].x)
x.x=a[j].x+b;
y.y=a[i].y+(a[j].x-a[i].x);
b=sqrt(d-(a[i].y-y.y)*(a[i].y-y.y));
y.x=a[i].x-b;
if(y.x>a[i].x)
y.x=a[i].x+b;
if((cauta(x))&&(cauta(y)))
nr++;
}
else {
x.y=a[j].y-(a[j].x-a[i].x);
d=(double)((a[i].x-a[j].x)*(a[i].x-a[j].x)+(float)(a[i].y-a[j].y)*(a[i].y-a[j].y));
b=sqrt(d-(a[j].y-x.y)*(a[j].y-x.y));
x.x=a[j].x-b;
if(x.x<a[j].x)
x.x=a[j].x+b;
y.y=a[i].y-(a[j].x-a[i].x);
b=sqrt(d-(a[i].y-y.y)*(a[i].y-y.y));
y.x=a[i].x-b;
if(y.x<a[i].x)
y.x=a[i].x+b;
if((cauta(x))&&(cauta(y)))
nr++;
x.y=a[j].y+(a[j].x-a[i].x);
d=(double)((a[i].x-a[j].x)*(a[i].x-a[j].x)+(float)(a[i].y-a[j].y)*(a[i].y-a[j].y));
b=sqrt(d-(a[j].y-x.y)*(a[j].y-x.y));
x.x=a[j].x-b;
if(x.x>a[j].x)
x.x=a[j].x+b;
y.y=a[i].y+(a[j].x-a[i].x);
b=sqrt(d-(a[i].y-y.y)*(a[i].y-y.y));
y.x=a[i].x-b;
if(y.x>a[i].x)
y.x=a[i].x+b;
if((cauta(x))&&(cauta(y)))
nr++;
}
}
g<<nr/4;
g.close();
return 0;
}