#include #include #include #include

using namespace std;

struct Slide { int xmin, xmax, ymin, ymax; } slides[26];

struct Point { int x, y; } points[26];

bool possible[26][26]; // possible[i][j]表示数字i+1可能在幻灯片j(A=0,B=1...)上 bool used_num[26]; // 标记数字是否已被匹配 bool used_slide[26]; // 标记幻灯片是否已被匹配 pair<char, int> result[26]; // 存储匹配结果

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

// 读取幻灯片坐标
for (int i = 0; i < n; ++i) {
    cin >> slides[i].xmin >> slides[i].xmax >> slides[i].ymin >> slides[i].ymax;
}

// 读取数字坐标并初始化可能的对应关系
for (int i = 0; i < n; ++i) {
    cin >> points[i].x >> points[i].y;
    for (int j = 0; j < n; ++j) {
        // 检查数字i+1的坐标是否在幻灯片j的范围内
        if (points[i].x >= slides[j].xmin && points[i].x <= slides[j].xmax &&
            points[i].y >= slides[j].ymin && points[i].y <= slides[j].ymax) {
            possible[i][j] = true;
        } else {
            possible[i][j] = false;
        }
    }
}

memset(used_num, false, sizeof(used_num));
memset(used_slide, false, sizeof(used_slide));
int count = 0;

// 循环寻找唯一匹配的数字和幻灯片
while (count < n) {
    bool found = false;
    // 检查每个数字是否只有一个可能的幻灯片
    for (int i = 0; i < n; ++i) {
        if (used_num[i]) continue;
        int cnt = 0;
        int slide = -1;
        for (int j = 0; j < n; ++j) {
            if (!used_slide[j] && possible[i][j]) {
                cnt++;
                slide = j;
            }
        }
        if (cnt == 1) { // 找到唯一匹配
            result[slide] = { 'A' + slide, i + 1 };
            used_num[i] = true;
            used_slide[slide] = true;
            count++;
            found = true;
            break;
        }
    }
    if (found) continue;

    // 检查每个幻灯片是否只有一个可能的数字
    for (int j = 0; j < n; ++j) {
        if (used_slide[j]) continue;
        int cnt = 0;
        int num = -1;
        for (int i = 0; i < n; ++i) {
            if (!used_num[i] && possible[i][j]) {
                cnt++;
                num = i;
            }
        }
        if (cnt == 1) { // 找到唯一匹配
            result[j] = { 'A' + j, num + 1 };
            used_num[num] = true;
            used_slide[j] = true;
            count++;
            found = true;
            break;
        }
    }
    if (!found) break; // 未找到唯一匹配,无法确定对应关系
}

// 输出结果
if (count == n) {
    for (int i = 0; i < n; ++i) {
        cout << result[i].first << " " << result[i].second << endl;
    }
} else {
    cout << "None" << endl;
}

return 0;

}

1 条评论

  • 1

信息

ID
398
时间
ms
内存
MiB
难度
8
标签
递交数
25
已通过
4
上传者