제출 #1251398

#제출 시각아이디문제언어결과실행 시간메모리
1251398thecodingraceteam축제 (IOI25_festival)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> max_coupons(int A, vector<int> P, vector<int> T) {
    int n=P.size();
    const long long INF=4000000000000000000LL;
    vector<pair<long long,int>> g[5], v1;
    for(int i=0;i<n;i++){
        if(T[i]==1) v1.push_back({P[i],i});
        else g[T[i]].push_back({P[i],i});
    }
    sort(v1.begin(),v1.end());
    for(int t=2;t<=4;t++) sort(g[t].begin(),g[t].end());
    vector<long long> s1(v1.size());
    for(size_t i=0;i<v1.size();i++) s1[i]=(i? s1[i-1]:0)+v1[i].first;
    auto f=[&](long long x)->int{
        if(s1.empty()) return 0;
        return upper_bound(s1.begin(),s1.end(),x)-s1.begin();
    };
    priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>> h[5];
    vector<int> p(5,0), r;
    long long x=A;
    while(1){
        for(int t=2;t<=4;t++){
            while(p[t]<(int)g[t].size() && g[t][p[t]].first<=x){
                h[t].push(g[t][p[t]]);
                p[t]++;
            }
        }
        long long best=-1; int bt=-1; pair<long long,int> bi;
        int fx=f(x);
        for(int t=2;t<=4;t++){
            if(h[t].empty()) continue;
            auto cur=h[t].top();
            long long nx=(long long)(x-cur.first)*t;
            if(nx<0) nx=0;
            if(nx>INF) nx=INF;
            if(1+f(nx) < fx) continue;
            if(nx>best || (nx==best && cur.first<bi.first)){
                best=nx; bt=t; bi=cur;
            }
        }
        if(bt==-1) break;
        h[bt].pop();
        r.push_back(bi.second);
        x=best;
    }
    for(auto &e:v1){
        if(e.first<=x){
            x-=e.first;
            r.push_back(e.second);
        }else break;
    }
    return r;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n; long long A;
    if(!(cin>>n>>A)) return 0;
    vector<int> P(n), T(n);
    for(int i=0;i<n;i++) cin>>P[i]>>T[i];
    vector<int> R=max_coupons((int)A,P,T);
    cout<<R.size()<<"\n";
    for(size_t i=0;i<R.size();i++){
        if(i) cout<<" ";
        cout<<R[i];
    }
    cout<<"\n";
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccqgRiFQ.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccEFnCLL.o:festival.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status