Mai intai trebuie sa te autentifici.
Cod sursa(job #1139632)
Utilizator | Data | 11 martie 2014 12:51:56 | |
---|---|---|---|
Problema | Patrate 3 | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.06 kb |
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
int n,i,sol,j,st,dr,mid,ok;
double x1,x2,x3,x4,y1,y2,y3,y4,xg,yg;
struct point {
double x;
double y;
} v[1005];
char s[20];
bool cmp(const point &a, const point &b) {
if(a.x==b.x)
return a.y<b.y;
return a.x<b.x;
}
int main() {
f>>n;
for(j=1;j<=n;j++) {
f>>s;
for(i=0;s[i]!=0;i++)
if(s[i]!='.') {
v[j].x=v[j].x*10+(s[i]-'0')*1.0;
}
f>>s;
for(i=0;s[i]!=0;i++)
if(s[i]!='.') {
v[j].y=v[j].y*10+(s[i]-'0')*1.0;
}
}
sort(v+1,v+n+1,cmp);
sol=0;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++) {
x1=v[i].x;y1=v[i].y;
x3=v[j].x;y3=v[j].y;
xg=(x1+x3)/2.0;yg=(y1+y3)/2.0;
x2=xg-(y3-yg);y2=yg+(xg-x1);
x4=xg+(y3-yg);y4=yg-(xg-x1);
st=1;dr=n;ok=1;
while(st<=dr) {
mid=st+(dr-st)/2;
if(v[mid].x>x2)
dr=mid-1;
else
if(v[mid].x<x2)
st=mid+1;
else
if(v[mid].y>y2)
dr=mid-1;
else
st=mid+1;
}
if(v[dr].x!=x2 || v[dr].y!=y2)
ok=0;
st=1;dr=n;
while(st<=dr) {
mid=st+(dr-st)/2;
if(v[mid].x>x4)
dr=mid-1;
else
if(v[mid].x<x4)
st=mid+1;
else
if(v[mid].y>y4)
dr=mid-1;
else
st=mid+1;
}
if(v[dr].x!=x4 || v[dr].y!=y4)
ok=0;
if(ok)
sol++;
}
g<<sol/2<<"\n";
return 0;
}