按仓库编号从小到大枚举候选上级,选择第一个在所有编码维度都严格更大的仓库。
OJ: shumeng
题目 ID: CSP202312A
难度:入门
标签:枚举模拟
日期: 2026-07-31 16:21
形式化题目
给定
思路
直接按定义枚举即可,数据范围很小(
枚举候选
对每个仓库
判断条件
检查 code[j][k] <= code[i][k],即可判定
注意候选不能是自身(i == j)。
代码
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-07-31 16:21
* update_at: 2026-08-17 22:40
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1005;
int n, m;
int code[MAXN][15]; // code[i][k] 仓库 i 的第 k 维位置编码
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int k = 0; k < m; k++) cin >> code[i][k];
}
// 对每个仓库,按编号递增的顺序找第一个满足条件的上级
for (int i = 1; i <= n; i++) {
int parent = 0;
for (int j = 1; j <= n; j++) {
if (i == j) continue; // 不能是自己
bool greater = true;
// 每一维都必须严格大于
for (int k = 0; k < m; k++) {
if (code[j][k] <= code[i][k]) {
greater = false;
break;
}
}
if (greater) {
parent = j;
break; // 编号最小且可行,直接停止
}
}
cout << parent << '\n';
}
return 0;
}复杂度
最坏情况下每个仓库要检查全部仓库和全部维度,时间复杂度为
总结
题目只要求编号最小的可行候选,不需要比较候选之间的“优劣”。按编号顺序扫描并在第一个满足条件的位置停止,就同时完成了可行性判断和最小编号选择。