HOW E
  • 板块学术版
  • 楼主Cute_Fish
  • 当前回复17
  • 已保存回复17
  • 发布时间2024/12/14 21:41
  • 上次更新2024/12/15 08:33:17
查看原帖
HOW E
1121412
Cute_Fish楼主2024/12/14 21:41

RT。

WA6个1h都调不出。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
const int N=507;
const int dx[4]={0,1,0,-1};
const int dy[4]={1,0,-1,0};
int n,m,x,y,p;
__int128 res=0;
bool vis[N][N]; 
int a[N][N];
inline bool check(int xx,int yy){
	if(xx<1||yy<1||xx>n||yy>m||vis[xx][yy])return 1;
	return 0;
}
struct node{
	int first,second,val;
	inline bool operator < (const node &X)const{return val>X.val;}
};
inline void print(__int128 x){
	if(x>9)print(x/10);
	putchar(x%10+'0');
	
}
signed main(){
	cin>>n>>m>>p>>x>>y;
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=m;j++)cin>>a[i][j];
	priority_queue<node>q;
	while(!q.empty())q.pop();
	res=a[x][y];
	vis[x][y]=1;
	a[x][y]=0;
	q.push({x,y,a[x][y]});
//	for(int i=0;i<4;i++){
//		int nx=x+dx[i],ny=y+dy[i];
//		if(check(nx,ny))continue;
//		q.push({nx,ny,a[nx][ny]});
//	}
	while(!q.empty()){
		int ax=q.top().first,ay=q.top().second;q.pop();
//		if(vis[ax][ay])continue;
        if(res>__int128(a[ax][ay]*p)){
	    	res+=a[ax][ay];
            a[ax][ay]=0;
			vis[ax][ay]=1;
		}else continue;
		for(int i=0;i<4;i++){
			int nx=ax+dx[i],ny=ay+dy[i];
			if(vis[nx][ny]){
				continue;
			}
			if(nx<1||ny<1||nx>n||ny>m)continue;
			q.push({nx,ny,a[nx][ny]});
		}
	}
	print(res);
}

2024/12/14 21:41
加载中...