题目大意为给一堆有同样听力距离的人的坐标,人会打枪,问每个人听到的枪声数形成的序列有多少种?(题目真长)
仔细分析可以看出人与人之间的距离是不同种类的分割点。所以算距离去重再加上1就是序列总数.
排序去重一边过了,其他没有尝试。
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return (*(int*)a)>(*(int*)b)?-1:1;
}
int main()
{
int t,ca=1;
scanf("%d",&t);
while (t--)
{
int n,i,j,x[710],y[710],dis[700*700/2],c=0,s=0;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d%d",&x[i],&y[i]);
for (j=1;j<=i-1;j++)
{
dis[c]=(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]);
c++;
}
}
qsort(dis,c,sizeof(dis[0]),cmp);
for (i=0;i<=c-1;i++) if (dis[i]!=dis[i+1]) s++;
printf("Case %d: %d\n",ca++,s+1);
}
}