题解:P16064 [CSPro 32] 仓库规划
Dr_KC_Haus · · 题解
:::info[思路]{open}
数据范围不大,就用一个二维数组假设
-
对于每个仓库,遍历所有其他的仓库,看是否满足上级的条件。
-
如果满足条件且编号更小,那么就更新上级仓库的编号。
-
最后输出每个仓库的上级仓库编号,如果无上级则输出
0 。 :::
:::warning[注意]{open} 一个仓库不能成为它自己的上级。 :::
:::success[AC Code]
#include <bits/stdc++.h>
#define int long long
using namespace std;
int a[1000][10];//假设最大1000个仓库,10维
int n,m;
signed main(void){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
for(int i=0;i<n;i++){
int ans=0;
for(int j=0;j<n;j++){
//自己不能成为自己的上级
if(i==j) continue;
bool flag=true;//标记
for(int k=0;k<m;k++){
if(a[j][k]<=a[i][k]){
flag=false;//不满足上级条件
break;
}
}
if (flag and (ans==0 or j+1<ans)) ans=j+1;//满足条件,更新编号
}
cout<<ans<<endl;
}
exit(0);
}
:::