[PTA]2025CCCC-GPLT天梯赛 现代战争

  • 来源: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;
}
posted @ 2025-04-21 21:32  椰萝Yerosius  阅读(70)  评论(0)    收藏  举报