rt。
下面这份代码 WA 9pts:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e5+10;
ll n,ct,a[N],b[N];
struct P{
ll val,x,y;
bool operator<(const P& B)const{return val<B.val;}
}t;
set<P> s;
int 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],s.insert({a[1]+b[i],1,i});
while(++ct<=n){
cout<<(s.begin()->val)<<" ";t=*s.begin();s.erase(s.begin());
s.insert({a[t.x+1]+b[t.y],t.x+1,t.y});
}
return 0;
}
下面这份代码过了:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=1e5+10;
ll n,ct,a[N],b[N];
struct P{
ll val,x,y;
bool operator<(const P& B)const{return val<B.val;}
}t;
multiset<P> s;
int 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],s.insert({a[1]+b[i],1,i});
while(++ct<=n){
t=*s.begin();s.erase(s.begin());cout<<t.val<<" ";
s.insert({a[t.x+1]+b[t.y],t.x+1,t.y});
}
return 0;
}
可以发现就把 set 改成了 multiset。但按理说堆里面不会有重复的数/yiw,为什么要用 multiset?