- 来源:L1-112 现代战争-Pintia
- 题意:给定 \(n\times m\) 的矩阵,进行 \(k\) 次操作,每次操作清除矩阵当前最大值所在行和所在列的全部元素,求最终矩阵。
- 关键词:模拟(签到)
- 题解:非常水的模拟题,模拟即可。
- 代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,h;
};
bool cmp(node a,node b){
return a.h<b.h;
}
void solve(){
int n,m,k;cin>>n>>m>>k;
vector<vector<node>>mp(n,vector<node>(m));
priority_queue<node,deque<node>,bool(*)(node,node)>pq(cmp);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
mp[i][j].x=i,mp[i][j].y=j;
cin>>mp[i][j].h;
pq.push(mp[i][j]);
}
vector<bool>hang(n),lie(m);
while(k--){
while(hang[pq.top().x]||lie[pq.top().y]) pq.pop();
hang[pq.top().x]=1,lie[pq.top().y]=1;
}
//由于PTA的智障判题机制,行末空格有严格要求
for(int i=0;i<n;i++){
if(!hang[i]){
bool ok=0;
for(int j=0;j<m;j++){
if(!lie[j]) {
if(ok) cout<<' ';
else ok=1;
cout<<mp[i][j].h;
}
}
cout<<'\n';
}
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0);
solve();
return 0;
}