MnZn 求助,打板子赛的时候莫名 WA 了
  • 板块P1631 序列合并
  • 楼主jianhe
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/11/27 08:47
  • 上次更新2024/11/27 14:02:16
查看原帖
MnZn 求助,打板子赛的时候莫名 WA 了
613794
jianhe楼主2024/11/27 08:47

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

2024/11/27 08:47
加载中...