当前位置:实例文章 » Python实例» [文章]【华为OD机试2023】服务中心选址 100% C++ Java Python

【华为OD机试2023】服务中心选址 100% C++ Java Python

发布人:shili8 发布时间:2023-05-22 08:36 阅读次数:78

题目描述

某公司要在某个城市开设服务中心,为了方便客户,服务中心需要尽可能地靠近客户。现在给出客户的坐标和服务中心的候选坐标,请你编写一个程序,找出最佳的服务中心位置。

输入格式

第一行包含一个整数 n,表示客户的数量。

接下来 n 行,每行包含两个整数 xi 和 yi,表示客户的坐标。

接下来一行包含一个整数 m,表示服务中心的候选坐标数量。

接下来 m 行,每行包含两个整数 xi 和 yi,表示服务中心的候选坐标。

输出格式

输出最佳的服务中心位置,保留两位小数。

数据范围

1≤n≤1000
1≤m≤1000
?10000≤xiyi≤10000

样例

输入样例:
4
-1 1
1 1
1 -1
-1 -1
4
0 0
0 1
1 0
1 1
输出样例:
0.00 0.00

C++ 代码

#include
#include
#include
#include
#include

using namespace std;

const int N = 1010;

int n m;
int x[N] y[N] xx[N] yy[N];

double get_dist(int a int b)
{
return sqrt((x[a] - xx[b]) * (x[a] - xx[b]) + (y[a] - yy[b]) * (y[a] - yy[b]));
}

int main()
{
scanf(%d &n);
for (int i = 0; i < n; i ++ ) scanf(%d%d &x[i] &y[i]);
scanf(%d &m);
for (int i = 0; i < m; i ++ ) scanf(%d%d &xx[i] &yy[i]);

double res = 1e20;
int idx = -1;
for (int i = 0; i < m; i ++ )
{
double sum = 0;
for (int j = 0; j < n; j ++ ) sum += get_dist(j i);
if (sum < res)
{
res = sum;
idx = i;
}
}

printf(%.2lf %.2lf
xx[idx] * 1.0 yy[idx] * 1.0);

return 0;
}

Java 代码

import java.util.Scanner;

public class Main
{
static int n m;
static int[] x = new int[1010] y = new int[1010] xx = new int[1010] yy = new int[1010];

public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
for (int i = 0; i < n; i ++ )
{
x[i] = scan.nextInt();
y[i] = scan.nextInt();
}
m = scan.nextInt();
for (int i = 0; i < m; i ++ )
{
xx[i] = scan.nextInt();
yy[i] = scan.nextInt();
}

double res = 1e20;
int idx = -1;
for (int i = 0; i < m; i ++ )
{
double sum = 0;
for (int j = 0; j < n; j ++ ) sum += get_dist(j i);
if (sum < res)
{
res = sum;
idx = i;
}
}

System.out.printf(%.2f %.2f
xx[idx] * 1.0 yy[idx] * 1.0);
}

static double get_dist(int a int b)
{
return Math.sqrt((x[a] - xx[b]) * (x[a] - xx[b]) + (y[a] - yy[b]) * (y[a] - yy[b]));
}
}

Python 代码

n = int(input())
x = [0] * n
y = [0] * n
for i in range(n):
x[i] y[i] = map(int input().split())

m = int(input())
xx = [0] * m
yy = [0] * m
for i in range(m):
xx[i] yy[i] = map(int input().split())

res = 1e20
idx = -1
for i in range(m):
sum = 0
for j in range(n):
sum += ((x[j] - xx[i]) ** 2 + (y[j] - yy[i]) ** 2) ** 0.5
if sum < res:
res = sum
idx = i

print(%.2f %.2f % (xx[idx] yy[idx]))

相关标签:
其他信息

其他资源

Top