Pagini recente » Cod sursa (job #2759239) | Cod sursa (job #2056668) | Cod sursa (job #2648177) | Cod sursa (job #1134173) | Cod sursa (job #1155552)
#include <fstream>
#include <algorithm>
#include <string.h>
using namespace std;
ifstream f("patrate3.in");
ofstream g("patrate3.out");
int n, st, dr, mij, i, nrp, j, ys, xs, yj, xj, oks, okj, nr, sm;
char nr1[17], nr2[17];
double xm, ym;
struct punct{
int x;
int y;
}p[1001];
int modul (int x)
{
if (x<0)
return -x;
return x;
}
bool cmp(const punct &p1, const punct &p2)
{
if (p1.x == p2.x)
return p1.y < p2.y;
return p1.x < p2.x;
}
int main()
{
f>>n;
for (i=1; i<=n; i++) {
f>>nr1;
f>>nr2;
nr=0;
j=0;
sm=0;
for (j=0; j<strlen(nr1); j++) {
if (nr1[j]!='.' && nr1[j]!='-')
nr=nr*10+(nr1[j]-'0');
if (nr1[j]=='-')
sm=1;
}
if (sm==1)
p[i].x=-nr;
else
p[i].x=nr;
nr=0;
j=0;
sm=0;
for (j=0; j<strlen(nr2); j++) {
if (nr2[j]!='.' && nr2[j]!='-')
nr=nr*10+(nr2[j]-'0');
if (nr2[j]=='-')
sm=1;
}
if (sm==1)
p[i].y=-nr;
else
p[i].y=nr;
}
sort (p + 1, p+n+1, cmp);
for (i=1; i<=n; i++) {
for (j=i+1; j<=n; j++) {
xm=(p[i].x+p[j].x)/2;
ym=(p[i].y+p[j].y)/2;
if (p[i].y >= p[j].y) {
xs=xm+modul(ym-p[i].y);
ys=ym+modul(xm-p[i].x);
xj=xm-modul(ym-p[i].y);
yj=ym-modul(xm-p[i].x);
}
else {
xs=xm-modul(ym-p[i].y);
ys=ym+modul(xm-p[i].x);
xj=xm+modul(ym-p[i].y);
yj=ym-modul(xm-p[i].x);
}
st=i+1;
dr=j-1;
oks=0;
while (st<=dr) {
mij=(st+dr)/2;
if (p[mij].x > xs)
dr=mij-1;
else if (p[mij].x < xs)
st=mij+1;
else {
if (p[mij].y == ys) {
oks=1;
break;
}
else if (p[mij].y > ys)
dr=mij-1;
else
st=mij+1;
}
}
okj=0;
st=i+1;
dr=j-1;
while (st<=dr) {
mij=(st+dr)/2;
if (p[mij].x > xj)
dr=mij-1;
else if (p[mij].x < xj)
st=mij+1;
else {
if (p[mij].y == yj) {
okj=1;
break;
}
else if (p[mij].y > yj)
dr=mij-1;
else
st=mij+1;
}
}
if (oks==1 && okj==1)
nrp++;
}
}
g<<nrp;
return 0;
}