前言
推荐书目,在这里推荐那一本《算法笔记》(胡明),需要PDF的话,链接如下
「链接:https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd=6vdq# 提取码:6vdq”复制这段内容后打开手机迅雷App,查看更方便」
希望有大神能够提供改良意见,敬礼!
---------------------------------------------------------------------------------------------------------------------------------
题目
【题目描述】
【输入格式】
【输出格式】
【样例 1 输入】
4 2
0 0
-1 -1
1 2
0 -1
【样例 1 输出】
3
1
0
3
【样例 1 解释】
【样例 2 输入】
【样例 2 输出】
【样例 2 解释】
【样例 3 输入】
【样例 3 输出】
【样例 3解释】
【子任务】
思路分析:
本题的思想比较简单,主要思想就是将仓库先全部存起来,再从序号小到序号大对比选中的仓库,要求序号不能和选中的相同。对比中如果一个仓库所有的坐标都大于选定的仓库,就输出该仓库的序号。
序号要比下标+1。
由于是从小到大的进行比较,所以选中的就是最小序号的,可以直接输出。
代码也很短。求大佬提供更好的办法。
代码如下:
#include <bits/stdc++.h>//万能头文件
using namespace std;
const int N=10;//设置界限
int main() {
int n=0;//n是仓库的个数
int m=0;//m位置的标号数
int result=0;//存储结果
cin>>n>>m;
struct store{//存储数据的结构体
int x[N];
};
struct store s1[n];
for(int i=0;i<n;i++){//输入
for(int j=0;j<m;j++){
cin>>s1[i].x[j];
}
}
for(int i=0;i<n;i++){//加上变化值
result=0;
for(int j=0;j<n;j++){
if(i==j){
continue;//相等的情况直接切换到其他仓库
}
int isfather=0;
for(int k=0;k<m;k++){//从小到大,确保找到的第一个是序号最小的
if(s1[i].x[k]<s1[j].x[k]){//判断是否小于
isfather++;
}
}
if(isfather==m){
result=j+1;
break; //找到就跳出循环,找下一个的,找到的就是最小的
}
}
cout<<result<<endl;
}
return 0;
}