求助.WA4个点.玄关
查看原帖
求助.WA4个点.玄关
712647
rhx103513yyds楼主2024/8/21 14:41
#include<bits/stdc++.h>
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3)
//#pragma G++ optimize(1)
//#pragma G++ optimize(2)
//#pragma G++ optimize(3)
//#pragma GDB optimize(1)
//#pragma GDB optimize(2)
//#pragma GDB optimize(3)
using namespace std;
#define int long long
int n,m,t;
int a[2005][2005];
bool v[2005][2005];
struct node{
	int x,y;
	int z;
	friend bool operator>(node a,node b){
		return a.z>b.z;
	}
};
priority_queue<node,vector<node>,greater<node> >q;
int walk[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int ans;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>t;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	ans=n*m;
	for(int i=1;i<=n;i++){
		q.push({i,1,a[i][1]});
		q.push({i,m,a[i][m]});
		v[i][1]=1;
		v[i][m]=1;
	}
	for(int i=1;i<=m;i++){
		if(v[1][i])continue;
		if(v[n][i])continue;
		q.push({1,i,a[1][i]});
		q.push({n,i,a[n][i]});
		v[1][i]=1;
		v[n][i]=1;
	}
	for(int i=1;i<=t;i++){
		while(!q.empty()){
			node u=q.top();
			if(u.z>i)break;
//			cout<<i<<" "<<u.x<<" "<<u.y<<" "<<u.z<<"--\n";
			q.pop();
			ans--;
			for(int j=0;j<4;j++){
				int nx=u.x+walk[j][0],ny=u.y+walk[j][1];
//				cout<<nx<<" "<<ny<<" "<<a[nx][ny]<<"-\n";
				if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&!v[nx][ny]){
					q.push({nx,ny,a[nx][ny]});
					v[nx][ny]=1;
				}
			}
		}
		cout<<ans<<"\n";
	}
	return 0;
}

/*
4 7 3
1 2 1 3 2 2 1
3 2 1 3 2 2 1
2 1 3 3 2 1 3
1 2 3 2 3 1 2














6 8 7
7 1 2 4 8 8 8 8
8 6 6 7 4 7 1 8
2 7 5 4 2 6 0 5
4 3 1 3 5 8 9 3
3 1 1 4 3 7 7 6
4 0 4 6 3 1 3 3

3 3 5
10 2 10
3 1 4
10 5 10

5 5 3
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1

5 5 8
1 1 1 2 8
1 9 9 9 7
6 9 6 9 1
7 9 9 9 7
1 9 3 7 6
*/
2024/8/21 14:41
加载中...