求助,wa了一个样例,找不出是哪有问题qwq
查看原帖
求助,wa了一个样例,找不出是哪有问题qwq
998716
lukangming楼主2024/7/26 15:16
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
const int N=1010;
int s[N][N];
struct cmp{
    bool operator()(const tuple<int,int,int>&a,const tuple<int,int,int>&b)
    {
        return get<0>(a)>get<0>(b);
    }
};
int d[][2]={{0,1},{1,0},{-1,0},{0,-1}};
map<array<int,2>,int>mp;
priority_queue<tuple<int, int, int>,vector<tuple<int, int, int>>, cmp>q;
int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)cin>>s[i][j];

    for(int i=1;i<=n;i++){
        if(i==1||i==n){
            for(int j=1;j<=m;j++)q.push({s[i][j],i,j}),mp[{i,j}]=1;
        }
        else {q.push({s[i][1],i,1});q.push({s[i][m],i,m});mp[{i,1}]=1,mp[{i,m}]=1;}
    }
    int now=0,res=0;
    	auto dfs=[&](int x,int y){
    		for(int i=0;i<4;i++){
    			int dx=d[i][0]+x;
    			int dy=d[i][1]+y;
    			if(dx<1||dy<1||dx>n||dy>m)continue;
    			if(mp[{dx,dy}])continue;
    			mp[{dx,dy}]=1;
    			q.push({s[dx][dy],dx,dy});
    		}
    	};
    auto bfs=[&](int no){
    	while(q.size()){
    		auto [z,x,y]=q.top();
    		if(z>no)break;
    		q.pop();
    		res++;
    		dfs(x,y);
    	}
    };
    for(int i=1;i<=k;i++){
    	auto [z,x,y]=q.top();
    	if(z<=i)
    		bfs(i);
    	cout<<n*m-res<<endl;
    }
    
}


2024/7/26 15:16
加载中...