Pagini recente » Istoria paginii runda/runda_1_biscuiti_cu_lacuste/clasament | Cod sursa (job #721419) | Cod sursa (job #1065588) | Cod sursa (job #460118) | Cod sursa (job #1065538)
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int NMAX = 1005;
const int BASE = 103;
const int MOD = 100009;
int N,M,i,j,r,x0,y0,x1,y1,x2,y2,x3,y3,dx,dy,mijx,mijy,SOL,ok;
struct Point {int x,y;} P[NMAX]; char S[100];
vector<pair<int,int> > V[MOD];
int main()
{
freopen("patrate3.in","r",stdin);
freopen("patrate3.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%s",S+1); M=strlen(S+1);
for(j=1;j<=M;j++) if(S[j]!='.') P[i].x=P[i].x*10+S[j]-'0';
scanf("%s",S+1); M=strlen(S+1);
for(j=1;j<=M;j++) if(S[j]!='.') P[i].y=P[i].y*10+S[j]-'0';
P[i].x*=2; P[i].y*=2;
r=(1LL*BASE*P[i].x+P[i].y)%MOD;
V[r].push_back(make_pair(P[i].x,P[i].y));
}
for(i=1;i<N;i++)
for(j=1;j<=N;j++)
if(P[i].y<P[j].y)
{
x0=P[i].x; y0=P[i].y;
x1=P[j].x; y1=P[j].y;
mijx=x0+(x1-x0)/2;
mijy=y0+(y1-y0)/2;
dx=abs(mijx-x0);
dy=abs(mijy-y0);
x2=mijx+dy; y2=mijy-dx;
x3=mijx-dy; y3=mijy+dx;
r=(1LL*BASE*x2+y2)%MOD; ok=0;
for(vector<pair<int,int> >::iterator it=V[r].begin();it!=V[r].end();it++)
if(it->first==x2 && it->second==y2) {ok=1; break;}
if(!ok) continue;
r=(1LL*BASE*x3+y3)%MOD; ok=0;
for(vector<pair<int,int> >::iterator it=V[r].begin();it!=V[r].end();it++)
if(it->first==x3 && it->second==y3) {ok=1; break;}
if(!ok) continue;
SOL++;
}
printf("%d\n",SOL);
return 0;
}