View Code of Problem 1056

#include<cstdio>
#include<algorithm>
using namespace std;

struct edge
{
	int x,y;
}a[1010],mid[1000010];
bool cmp(edge a,edge b)
{
	if(a.x==b.x)
		return a.y<b.y;
	return a.x<b.x;
}
int main()
{
	int t,n,num,sum,k=1;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		for(int i=0;i<n;i++)
		{
			scanf("%d%d",&a[i].x,&a[i].y);			
		}
		int cnt=0;
		for(int i=0;i<n;i++)
		{
			for(int j=i+1;j<n;j++)
			{
				mid[cnt].x=a[i].x+a[j].x;
				mid[cnt].y=a[i].y+a[j].y;
				cnt++;
			}
		}
		sort(mid,mid+cnt,cmp);
		num=1;
		sum=0;
		for(int i=1;i<cnt;i++)
		{
			if(mid[i].x==mid[i-1].x&&mid[i].y==mid[i-1].y)
				num++;
			else
			{
				sum+=num*(num-1)/2;
				num=1;	
			}			
		}
		printf("Case %d: %d\n",k++,sum);
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 1056