Submission #286522

#TimeUsernameProblemLanguageResultExecution timeMemory
286522gs18115Shopping Plans (CCO20_day2problem3)C++14
25 / 25
377 ms56960 KiB
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
#define ep emplace
#define eb emplace_back
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
using namespace std;
typedef long long ll;
typedef pair<int,int>pi;
typedef pair<ll,ll>pl;
const int inf=1e9+7;
const ll INF=1e18;
struct type
{
    int x,y;
    int sz;
    vector<int>lst;
    int fdif;
    type(){}
};
struct node
{
    ll val;
    int ci,cn;
    int ith,pos,mx;
    bool fi;
    node(ll val,int ci,int cn,int ith,int pos,int mx,bool fi=0):
    val(val),ci(ci),cn(cn),ith(ith),pos(pos),mx(mx),fi(fi){}
    bool operator<(const node&x)const
    {
        return val==x.val?fi&&!x.fi:val>x.val;
    }
};
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n,m,k;
    cin>>n>>m>>k;
    vector<vector<int> >vv(m);
    for(int i=0;i<n;i++)
    {
        int a,c;
        cin>>a>>c;
        vv[a-1].eb(c);
    }
    vector<type>tpv;
    ll fi=0;
    for(auto&v:vv)
    {
        int x,y;
        cin>>x>>y;
        sort(all(v));
        y=min(y,(int)v.size());
        if(x>y)
        {
            for(int i=0;i<k;i++)
                cout<<"-1\n";
            return 0;
        }
        for(int i=0;i<x;i++)
            fi+=v[i];
        if((int)v.size()>x)
        {
            tpv.eb(type());
            if(x==0)
                tpv.back().fdif=v[0];
            else
                tpv.back().fdif=v[x]-v[x-1];
            tpv.back().x=x,tpv.back().y=y;
            tpv.back().lst=v;
            tpv.back().sz=v.size();
        }
    }
    sort(all(tpv),[](const type&x,const type&y){return x.fdif<y.fdif;});
    vector<ll>ansv;
    ansv.eb(fi);
    priority_queue<node>pq;
    if(!tpv.empty())
    {
        if(tpv[0].x==0)
            pq.ep(fi+tpv[0].fdif,0,0,-1,-1,-1,1);
        else
            pq.ep(fi+tpv[0].fdif,0,tpv[0].x,tpv[0].x-1,tpv[0].x-1,tpv[0].sz-1,1);
    }
    int tps=tpv.size();
    while(!pq.empty()&&(int)ansv.size()<k)
    {
        node cur=pq.top();
        pq.pop();
        const type&tp=tpv[cur.ci];
        if(cur.first)
            cur.val-=tp.fdif;
        else
            ansv.eb(cur.val);
        if(cur.ith>0&&cur.pos>cur.ith)
            pq.ep(cur.val-tp.lst[cur.ith-1]+tp.lst[cur.ith],cur.ci,cur.cn,cur.ith-1,cur.ith,cur.pos-1);
        if(cur.pos<cur.mx)
            pq.ep(cur.val-tp.lst[cur.pos]+tp.lst[cur.pos+1],cur.ci,cur.cn,cur.ith,cur.pos+1,cur.mx);
        if(cur.ith==cur.cn-1&&cur.pos==cur.cn-1&&cur.cn<tp.y)
            pq.ep(cur.val+tp.lst[cur.cn],cur.ci,cur.cn+1,cur.cn,cur.cn,tp.sz-1);
        if(cur.ci+1<tps)
        {
            const type&ntp=tpv[cur.ci+1];
            if(ntp.x==0)
                pq.ep(cur.val+ntp.fdif,cur.ci+1,0,-1,-1,-1,1);
            else
                pq.ep(cur.val+ntp.fdif,cur.ci+1,ntp.x,ntp.x-1,ntp.x-1,ntp.sz-1,1);
        }
    }
    while((int)ansv.size()<k)
        ansv.eb(-1);
    for(ll&t:ansv)
        cout<<t<<'\n';
    return 0;
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:16:8: warning: '<anonymous>.type::x' may be used uninitialized in this function [-Wmaybe-uninitialized]
   16 | struct type
      |        ^~~~
Main.cpp:16:8: warning: '<anonymous>.type::y' may be used uninitialized in this function [-Wmaybe-uninitialized]
Main.cpp:16:8: warning: '<anonymous>.type::sz' may be used uninitialized in this function [-Wmaybe-uninitialized]
Main.cpp:16:8: warning: '<anonymous>.type::fdif' may be used uninitialized in this function [-Wmaybe-uninitialized]
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...