C++ 解决方案:还原 GOS2021 图标放置流程

果果操作系统 (Guo Operating System,GOS) 近期推出了 2021 船新版本。在 GOS2021 的默认设置中,桌面可视为 nm 的网格,一个文件图标占用 22 的正方形空间,必须放置在整格点之内,且不能超出桌面。GOS2021 引入了一些'人'性'化'的特性,例如允许图标重叠。

GOS2021 的图标堆叠系统规定,当同一格内存在多个重叠图标时,只显示最后放置的图标。你眼神不太好,当一个图标被遮挡一半以上时,你就难以分辨出来了。

经过一段时间的使用,你已在 GOS2021 系统中放置了 k 个图标 (从 1 到 k 编号),但是你忘了图标放置的顺序,你想:能否通过桌面显示的内容恢复图标放置的流程?

输入格式

第 1 行输入 3 个整数 n、m、k。

接下来 n 行,每行输入 m 个非负整数 a_i,j,构成一个 n*m 的方阵,描述 GOS2021 系统的桌面图标。数字 0 代表这个位置没有放置图标,其它数字代表占据这一格的图标的编号。

你眼神不好,因此在放置时不会把某个图标遮挡住一半以上。

数据保证当前桌面一定是通过合法的图标放置得到的,且图标的编号为 1∼k 。

输出格式

输出图标放置的流程,共 k 行,每行输出 3 个整数 id_i、x_i、y_i,表示第 i 个放置的图标编号为 id_i ,左上角格点的放置位置为 (x_i,y_i)。

注意,图标必须完整的放置在桌面上,即 1≤x_i≤n−1 ,1≤y_i≤m−1。

若有多种放置流程,输出任意一种均可。

示例代码

#include <iostream>
#include <vector>

using namespace std;

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

    vector<vector<int>> desktop(n, vector<int>(m, 0));
    vector<pair<int, pair<int, int>>> placement;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> desktop[i][j];
            if (desktop[i][j] != 0) {
                placement.push_back({desktop[i][j], {i, j}});
            }
        }
    }

    vector<vector<int>> result(n - 1, vector<int>(m - 1, 0));

    for (auto p : placement) {
        int id = p.first;
        int x = p.second.first;
        int y = p.second.second;
        result[x][y] = id;
    }

    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < m - 1; j++) {
            cout << result[i][j] << " " << i + 1 << " " << j + 1 << endl;
        }
    }

    return 0;
}

解释

在该解决方案中,首先读取输入的桌面大小 n、m 和图标数量 k。然后创建一个大小为 n×m 的二维向量 desktop 来表示桌面,其中每个元素表示对应位置上放置的图标编号。同时创建一个向量 placement 来保存已放置的图标及其位置。

接下来,通过嵌套循环读取桌面上每个位置的图标编号,并将其添加到 placement 向量中。然后,创建一个大小为 n-1×m-1 的二维向量 result 来表示图标放置的流程,初始值都为 0。

然后,遍历 placement 向量,取出每个图标及其位置,将其编号放置到 result 向量对应位置上。

最后,通过嵌套循环遍历 result 向量,输出图标放置的流程,即图标编号和左上角格点的放置位置。

请注意,该解决方案假设输入的桌面一定是通过合法的图标放置得到的,且图标的编号为 1 到 k。如果有多种放置流程,该解决方案将输出其中一种。

C++ 解决方案:还原 GOS2021 图标放置流程

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

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