在一个二维平面上有N个学生和M个检查点。第i (1<=i<=n)个学生的位置在(ai,bi),第j (1<=j<=m)个检查点的位置在(cj,dj)。

当老师给出信号后,每个学生都会跑向离他最近的检查点。在这里,我们用曼哈顿距离来定义学生距离与检查点的距离。 曼哈顿距离的定义是:点(x1,y1) 和 (x2,y2) 的曼哈顿距离等于|x1−x2|+|y1−y2|。其中,|x| 表示x的绝对值。

如果有多个检查点离某个学生距离相等,他/她会选择编号最小的那个。请聪明的你算算,每个学生分别会选择跑向哪个检查点。

用C++做内容:以下是使用C++实现的解决方案:

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

struct Student {
    int id;
    int x;
    int y;
    int nearest_checkpoint;
};

struct Checkpoint {
    int id;
    int x;
    int y;
};

int manhattan_distance(int x1, int y1, int x2, int y2) {
    return abs(x1 - x2) + abs(y1 - y2);
}

int main() {
    int n, m;
    cin >> n >> m;

    vector<Student> students(n);
    vector<Checkpoint> checkpoints(m);

    // 读取学生和检查点的位置
    for (int i = 0; i < n; i++) {
        students[i].id = i + 1;
        cin >> students[i].x >> students[i].y;
    }
    for (int i = 0; i < m; i++) {
        checkpoints[i].id = i + 1;
        cin >> checkpoints[i].x >> checkpoints[i].y;
    }

    // 对每个学生,计算距离最近的检查点
    for (int i = 0; i < n; i++) {
        int min_distance = manhattan_distance(students[i].x, students[i].y, checkpoints[0].x, checkpoints[0].y);
        students[i].nearest_checkpoint = checkpoints[0].id;

        for (int j = 1; j < m; j++) {
            int distance = manhattan_distance(students[i].x, students[i].y, checkpoints[j].x, checkpoints[j].y);
            if (distance < min_distance) {
                min_distance = distance;
                students[i].nearest_checkpoint = checkpoints[j].id;
            } else if (distance == min_distance && checkpoints[j].id < students[i].nearest_checkpoint) {
                students[i].nearest_checkpoint = checkpoints[j].id;
            }
        }
    }

    // 输出每个学生选择的检查点
    for (int i = 0; i < n; i++) {
        cout << students[i].nearest_checkpoint << endl;
    }

    return 0;
}

这个解决方案首先读取学生和检查点的位置,并使用manhattan_distance函数计算学生和检查点之间的曼哈顿距离。然后,对于每个学生,遍历所有的检查点,找到距离最近的检查点。如果有多个检查点距离相等,选择编号最小的那个。最后,输出每个学生选择的检查点编号。

请注意,这个解决方案使用了一些C++的语法和数据结构,如vectorstruct。如果你对这些语法和数据结构不熟悉,可以先学习一下相关知识。


原文地址: https://www.cveoy.top/t/topic/qwKn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录