Pagini recente » Cod sursa (job #2487211) | Cod sursa (job #253152) | Cod sursa (job #3227739) | Cod sursa (job #2245832) | Cod sursa (job #2351862)
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct cor{long long x, y;};
cor v[1001];
bool cmp(cor a, cor b){
if(a.x<b.x)
return true;
else{
if(a.x>b.x)
return false;
else{
if(a.y<b.y)
return true;
else
return false;
}
}
}
int main() {
int n, i, j, dr, stg1, mijl1, mijl2, contor=0, stg2;
long long xci, yci, xcj, ycj, xd, yd, centrux, centruy, vectorx, vectory;
double g1, g2;
char c;
FILE *fin, *fout;
fin = fopen("patrate3.in", "r");
fout = fopen("patrate3.out", "w");
fscanf(fin,"%d", &n);
c=fgetc(fin);
for(i=1;i<=n;i++){
c='0';
while(c!=' '){
c=fgetc(fin);
if(c!='.'&&c!=' '){
v[i].x*=10;
v[i].x+=c-'0';
}
}
c='0';
while(c!='\n'&&c!=EOF){
c=fgetc(fin);
if(c!='.'&&c!='\n'){
v[i].y*=10;
v[i].y+=c-'0';
}
}
}
sort(v+1,v+n+1,cmp);
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
if(i!=j){
//punctele sunt alaturate
if(v[i].y>v[j].y)
xd=v[j].x-v[i].x;
else
xd=v[i].x-v[j].x;
yd=abs(v[i].y-v[j].y);
xci=v[i].x+yd;
yci=v[i].y+xd;
xcj=v[j].x+yd;
ycj=v[j].y+xd;
stg1=j;
dr=n+1;
while(dr-stg1>0){
mijl1=(stg1+dr)/2+1;
if(v[mijl1].x==xci&&v[mijl1].y==yci){
stg1=mijl1;
break;
}
if(v[dr].x==xci&&v[dr].y==yci){
stg1=dr;
break;
}
if(v[mijl1].x>=xci)
dr=mijl1-1;
else{
if(v[mijl1].x<xci)
stg1=mijl1+1;
else{
if(v[mijl1].y>=yci)
dr=mijl1-1;
else
stg1=mijl1+1;
}
}
}
stg2=j;
dr=n+1;
while(dr-stg2>0){
mijl2=(dr+stg2)/2+1;
if(v[mijl2].x==xcj&&v[mijl2].y==ycj){
stg2=mijl2;
break;
}
if(v[dr].x==xcj&&v[dr].y==ycj){
stg2=dr;
break;
}
if(v[mijl2].x>=xcj)
dr=mijl2-1;
else{
if(v[mijl2].x<xcj)
stg2=mijl2+1;
else{
if(v[mijl2].y>=ycj)
dr=mijl2-1;
else
stg2=mijl2+1;
}
}
}
if(v[stg1].x==xci&&v[stg1].y==yci&&v[stg2].x==xcj&&v[stg2].y==ycj)
contor++;
//punctele sunt opuse
centrux=(v[i].x+v[j].x)/2;
centruy=(v[i].y+v[j].y)/2;
vectorx=v[i].y-centruy;
vectory=v[i].x-centrux;
xci=centrux-vectorx;
yci=centruy+vectory;
xcj=centrux+vectorx;
ycj=centruy-vectory;
stg1=j;
dr=n+1;
while(dr-stg1>0){
mijl1=(stg1+dr)/2+1;
if(v[mijl1].x==xci&&v[mijl1].y==yci){
stg1=mijl1;
break;
}
if(v[dr].x==xci&&v[dr].y==yci){
stg1=mijl1;
break;
}
if(v[mijl1].x>xci)
dr=mijl1-1;
else{
if(v[mijl1].x<xci)
stg1=mijl1+1;
else{
if(v[mijl1].y>=yci)
dr=mijl1-1;
else
stg1=mijl1+1;
}
}
}
stg2=j;
dr=n+1;
while(dr-stg2>0){
mijl2=(dr+stg2)/2+1;
if(v[mijl2].x==xcj&&v[mijl2].y==ycj){
stg2=mijl2;
break;
}
if(v[dr].x==xcj&&v[dr].y==ycj){
stg2=dr;
break;
}
if(v[mijl2].x>xcj)
dr=mijl2-1;
else{
if(v[mijl2].x<xcj)
stg2=mijl2+1;
else{
if(v[mijl2].y>=ycj)
dr=mijl2-1;
else
stg2=mijl2+1;
}
}
}
if(v[stg1].x==xci&&v[stg1].y==yci&&v[stg2].x==xcj&&v[stg2].y==ycj)
contor++;
}
}
}
fprintf(fout,"%d", contor);
fclose(fin);
fclose(fout);
return 0;
}