求hack/证明
查看原帖
求hack/证明
1111160
starish楼主2025/1/22 00:04

优先队列取出i,j,ai+bii,j,a_i+b_i

再加入i+1,j,ai+1+bji+1,j,a_{i+1}+b_ji,j+1,ai+bj+1i,j+1,a_i+b_{j+1}

顺便判断是否重复添加了 i+1,ji+1,ji,j+1i,j+1

会关注的

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,a[100005],b[100005];
map<int,int>mp[100005];
struct stt{
	int i,j,sum;
	friend bool operator <(stt a,stt b){
		return a.sum>b.sum;
	}
};
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++)cin>>b[i];
	priority_queue<stt>q;
	q.push({1,1,a[1]+b[1]});
	while(n--){
		stt st=q.top();
		q.pop();
		int i=st.i,j=st.j;
		if(mp[i][j]){
			n++;
			continue;
		}
		else mp[i][j]++;
		cout<<st.sum<<" ";
		q.push({i+1,j,a[i+1]+b[j]});
		q.push({i,j+1,a[i]+b[j+1]});
	}
}
2025/1/22 00:04
加载中...