### Day4: 1.202309-1 2.202312-1
#### 1.202309-1:坐标变换(其一)(小模拟)
简单,过
#### 2.202312-1:仓库规划(小模拟)
(1)理解判断逻辑即可
(2)代码(100):
```
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
map<int,vector<int>> mp;
for(int i=1;i<=n;i++){
vector<int> v(m,0);
for(int j=0;j<m;j++){
cin>>v[j];
}
mp[i]=v;
}
for(int i=1;i<=n;i++){
int index=0;
for(int j=1;j<=n;j++){
bool isFind=true;//注意这个判断在j循环里面
if(j==i){
continue;
}
for(int k=0;k<m;k++){
if(mp[j][k]<=mp[i][k]){
isFind=false;
break;
}
}
if(isFind){
index=j;
break;
}
}
cout<<index<<endl;
}
return 0;
}
```
(3)优化:
**使用 `vector<vector<int>>` 替代 `map<int, vector<int>>`**:
- 这样做可以减少查找的时间,因为 `vector` 的访问时间是 O(1) 而 `map` 是 O(log n)。此外,这样做也减少了内存的开销,因为 `map` 存储了额外的键值对信息。
```
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
vector<vector<int>> v(n+1,vector<int>(m));
for(int i=1;i<=n;i++){
for(int j=0;j<m;j++){
cin>>v[i][j];
}
}
for(int i=1;i<=n;i++){
int index=0;
for(int j=1;j<=n;j++){
if(j==i){
continue;
}
bool isFind=true;
for(int k=0;k<m;k++){
if(v[j][k]<=v[i][k]){
isFind=false;
break;
}
}
if(isFind){
index=j;
break;
}
}
cout<<index<<endl;
}
return 0;
}
```
今天先写两题吧,目前第一题全都刷完,明天开始刷第二题,加油!