您的位置:首页 > 其它

TYVJ 1081 最近距离 解题报告

2011-07-06 22:54 337 查看
怎么讲。。纯水题吧,随便搜一下就可以了。
  不过搜法也有很多,我第一次写的是直接求距离,因为要开平方,又是O(n^2)的复杂度,所以没超时。但是最后一个数据293ms,有点危险,看了下题解,有好方法,直接使用x^2+y^2,不开平方,毕竟就是比较距离嘛!
  写出来的那个代码全部WA了,不知道怎么回事,好困了,明天继续写。——2011年7月6日 22:53:12

  也不知道怎么回事,重写一次就直接AC。 有点无语的说,上代码:

#include <stdio.h>
#include <stdlib.h>
struct dot{
int x, y;
}dot[2000];

double getdis(int a, int b)
{
return (((double)dot[a].x) - dot[b].x) * (((double)dot[a].x) - dot[b].x) +
(((double)dot[a].y) - dot[b].y) * (((double)dot[a].y) - dot[b].y);
}

double ans = 20000000000.0, t;
int x, y;

int main(int argc, char **argv)
{
int i, j;
int n;
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%d%d", &dot[i].x, &dot[i].y);
}
for(i = 0; i < n; i++){
for(j = 0; j < n; j++){
if(i == j){
continue;
}
t = getdis(i, j);
if(ans > t){
ans = t;
if(i > j){
x = j, y = i;
}else{
x = i, y = j;
}
}
}
}
printf("%d %d\n", x + 1, y + 1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: