- 来源:L1-112 现代战争-Pintia
- 题意:给定 n × m n\times m n×m 的矩阵,进行 k k 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;}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;
}