解题思路: 要求每个学生距离最近的检查点的编号,可以分别计算每个学生到每个检查点的曼哈顿距离,然后选择距离最小的检查点的编号。

具体步骤如下:

  1. 读取输入的N和M;
  2. 创建两个二维数组students和checkpoints,用于存储学生和检查点的坐标;
  3. 分别读取N行学生的坐标和M行检查点的坐标,保存到students和checkpoints数组中;
  4. 对于每个学生,遍历所有的检查点,计算学生到检查点的曼哈顿距离,并保存最小距离和对应的检查点编号;
  5. 输出每个学生选择的检查点的编号。

C++代码实现如下:

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int main() {
    int N, M;
    cin >> N >> M;

    // 存储学生和检查点的坐标
    vector<vector<int>> students(N, vector<int>(2));
    vector<vector<int>> checkpoints(M, vector<int>(2));

    // 读取学生和检查点的坐标
    for (int i = 0; i < N; i++) {
        cin >> students[i][0] >> students[i][1];
    }
    for (int i = 0; i < M; i++) {
        cin >> checkpoints[i][0] >> checkpoints[i][1];
    }

    // 计算每个学生选择的检查点编号
    for (int i = 0; i < N; i++) {
        int minDist = INT_MAX;
        int minIndex = -1;
        for (int j = 0; j < M; j++) {
            int dist = abs(students[i][0] - checkpoints[j][0]) + abs(students[i][1] - checkpoints[j][1]);
            if (dist < minDist) {
                minDist = dist;
                minIndex = j + 1;
            }
        }
        cout << minIndex << endl;
    }

    return 0;
}

复杂度分析: 时间复杂度:O(N * M),其中N为学生数量,M为检查点数量。对于每个学生,需要遍历所有的检查点来计算距离。 空间复杂度:O(N + M),需要存储学生和检查点的坐标

C++题目描述在一个二维平面上有 �N 个学生和 �M 个检查点。第 �i 1=�=�1=i=n个学生的的位置在����aibi第�j 1=�=�1=j=m 个检查点的位置在 ����c j d j 。当老师给出信号后每个学生都会跑向离他最近的检查点。在这里我们用曼哈顿距离来定义学生距离与检查点的距离。曼哈顿距离的定义是:点 �1�1x1y1 和 �2�2x2y2 的曼哈顿距离等于 ∣�1−

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

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