ABC E求助
  • 板块学术版
  • 楼主xzy_AK_IOI
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/12/14 21:42
  • 上次更新2024/12/15 08:38:27
查看原帖
ABC E求助
1183074
xzy_AK_IOI楼主2024/12/14 21:42

A了大部分点

#include<bits/stdc++.h>
using namespace std;
const int N=2e7+10;
#define int long long
typedef long long ll;
#define F(i,k,n) for (ll i=k;i<=n;i++)
ll n,m,x,p,q;
ll mp[3001][3001];
int dy[5]={0,0,1,-1};
int dx[5]={1,-1,0,0};
bool Map[3001][3001];
struct node{
	ll x,y;
}l[N];
ll tot;
struct note{
	ll x,y;
	ll s;
	bool operator < (const note& a) const{
		return a.s<this->s;
	}
};
priority_queue <note> Q;
signed main(){ 
	cin>>n>>m>>x>>p>>q;
	F(i,1,n){
		F(j,1,m){
			cin>>mp[i][j];
		}
	}
	tot=1;
	l[1]=(node){p,q};
	Map[p][q]=1;
	ll sum=mp[p][q];
	while (1){
		F(i,0,3){
			int x2=l[tot].x+dx[i],y2=l[tot].y+dy[i];
			if (x2>0 && y2>0 && x2<=n && y2<=m && Map[x2][y2]==0){
				Map[x2][y2]=1;
				Q.push((note){x2,y2,mp[x2][y2]});
			}
		}
		int y;
		if (sum%x==0) y=sum/x;
		else y=sum/x+1;
		if (Q.top().s>=y) break;
		sum+=Q.top().s;
		tot++;
		l[tot]=(node){Q.top().x,Q.top().y};
		Q.pop();
	}
	cout<<sum;
	return 0;
}
2024/12/14 21:42
加载中...