让大家都喝上水的最短距离.
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/07/16 18:37:59
让大家都喝上水的最短距离.
在一个平面上有n(1
在一个平面上有n(1
![让大家都喝上水的最短距离.](/uploads/image/z/19892305-1-5.jpg?t=%E8%AE%A9%E5%A4%A7%E5%AE%B6%E9%83%BD%E5%96%9D%E4%B8%8A%E6%B0%B4%E7%9A%84%E6%9C%80%E7%9F%AD%E8%B7%9D%E7%A6%BB.)
不愿意想太多,既然没有时间和内存限制,直接暴力破解
#include <stdio.h>
int total;
long long map[100000][2];
long long calc_length(long long x, long long y)
{
long long ret = 0;
int i;
for(i = 0; i < total; i ++)
ret += abs(x - map[i][0]) + abs(y - map[i][1]);
return ret;
}
void main()
{
int i;
long long x, y, len, min_len;
long long min_x, min_y, max_x, max_y;
scanf("%d", &total);
for(i =0; i < total; i ++)
{
scanf("%lld%lld", &map[i][0], &map[i][1]);
if(i == 0)
{
min_x = max_x = map[0][0];
min_y = max_y = map[0][1];
}
else
{
if(min_x > map[i][0]) min_x = map[i][0];
if(min_y > map[i][1]) min_y = map[i][1];
if(max_x < map[i][0]) max_x = map[i][0];
if(max_y < map[i][1]) max_y = map[i][1];
}
}
for(x = min_x; x <= max_x; x ++)
for(y = min_y; y <= max_y; y ++)
{
len = calc_length(x, y);
if(x == min_x && y == min_y) min_len = len;
else if(min_len > len) min_len = len;
}
printf("%lld\n", min_len);
}
再问: 你那个abs是怎么定义的,运行报错诶。
再答: abs就是取绝对值 你试试include 能不能解决 不行的话 就加个宏定义 #define abs(x) (x>=0?x:(x*(-1)))
再问: 这个暴搜是超时的,题目中忘了标明,时间限制是1秒,内存限制是60M,可不可以麻烦您再帮我写一个,我自己写的也是超时2个测试用例,这个题目太蛋疼了,谢谢您啊。
#include <stdio.h>
int total;
long long map[100000][2];
long long calc_length(long long x, long long y)
{
long long ret = 0;
int i;
for(i = 0; i < total; i ++)
ret += abs(x - map[i][0]) + abs(y - map[i][1]);
return ret;
}
void main()
{
int i;
long long x, y, len, min_len;
long long min_x, min_y, max_x, max_y;
scanf("%d", &total);
for(i =0; i < total; i ++)
{
scanf("%lld%lld", &map[i][0], &map[i][1]);
if(i == 0)
{
min_x = max_x = map[0][0];
min_y = max_y = map[0][1];
}
else
{
if(min_x > map[i][0]) min_x = map[i][0];
if(min_y > map[i][1]) min_y = map[i][1];
if(max_x < map[i][0]) max_x = map[i][0];
if(max_y < map[i][1]) max_y = map[i][1];
}
}
for(x = min_x; x <= max_x; x ++)
for(y = min_y; y <= max_y; y ++)
{
len = calc_length(x, y);
if(x == min_x && y == min_y) min_len = len;
else if(min_len > len) min_len = len;
}
printf("%lld\n", min_len);
}
再问: 你那个abs是怎么定义的,运行报错诶。
再答: abs就是取绝对值 你试试include 能不能解决 不行的话 就加个宏定义 #define abs(x) (x>=0?x:(x*(-1)))
再问: 这个暴搜是超时的,题目中忘了标明,时间限制是1秒,内存限制是60M,可不可以麻烦您再帮我写一个,我自己写的也是超时2个测试用例,这个题目太蛋疼了,谢谢您啊。