題目:一個二維平面上有N個人(平面坐標(x,y)表示),他們同時開槍,
問有多少種聽到槍聲的時間。
分析:計算幾何。多少種聽到槍聲的時間即是求有多少種不同的點間距離。
計算所有點間的距離,排序,統計找到有多少種距離即可;
聽到自己的槍聲時間為0。
說明:sort過了,qsort TLE了╮(╯▽╰)╭。
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int dist[1000001] = {0};
int x[1001];
int y[1001];
int get_dist(int x1, int y1, int x2, int y2)
{
return (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
}
int main()
{
int T, N;
scanf("%d",&T);
for (int t = 1; t <= T; ++ t) {
scanf("%d",&N);
for (int i = 1; i <= N; ++ i) {
scanf("%d%d",&x[i],&y[i]);
}
int count = 1;
for (int i = 1; i <= N; ++ i) {
for (int j = i+1; j <= N; ++ j) {
dist[count ++] = get_dist(x[i], y[i], x[j], y[j]);
}
}
sort(dist, dist+count);
int ans = 1;
for (int i = 1; i < count; ++ i) {
if (dist[i] != dist[i-1]) {
ans ++;
}
}
printf("Case %d: %d\n",t,ans);
}
return 0;
}