Pagini recente » Cod sursa (job #2616256) | Cod sursa (job #2748159) | Cod sursa (job #317611) | Cod sursa (job #2657499) | Cod sursa (job #526421)
Cod sursa(job #526421)
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,x[1001],y[1001],c[1001],v[1001],nr;
int main()
{
int i,p1,p2,j,abscisa1,abscisa2,ordonata1,ordonata2,dr,st,m;
bool ok1,ok2;
freopen("dreptc.in","r",stdin);
freopen("dreptc.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&x[i],&y[i],&c[i]);
x[i]+=1000;
y[i]+=1000;
v[i]=(2001*x[i]+y[i])*6+c[i];
}
sort(v+1,v+n+1);
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
ok1=false;
ok2=false;
abscisa1=(v[i]-v[i]%6)/6-(v[i]%2001);
abscisa2=(v[j]-v[j]%6)/6-(v[j]%2001);
ordonata1=((v[i]-v[i]%6)/6)%2001;
ordonata2=((v[j]-v[j]%6)/6)%2001;
if(v[i]%6==v[j]%6 && abscisa1!=abscisa2 && ordonata1!=ordonata2)
{
p1=abscisa2 + ordonata1 + v[i]%6;
p2=abscisa1 + ordonata2 + v[i]%6;
st=1;dr=n;
while(st<=dr)
{
m=(st+dr)/2;
if(v[m]<p1)
dr=m-1;
if(v[m]>p1)
st=m+1;
if(v[m]==p1)
{
ok1=true;
break;
}
}
/////////////////////////////////////
st=1;dr=n;
while(st<=dr)
{
m=(st+dr)/2;
if(v[m]<p2)
dr=m-1;
if(v[m]>p2)
st=m+1;
if(v[m]==p2)
{
ok2=true;
break;
}
}
}
if(ok1==true && ok2==true)
nr++;
}
}
printf("%d\n",nr);
return 0;
}