Submission #1266958

#TimeUsernameProblemLanguageResultExecution timeMemory
1266958imarnFestival (IOI25_festival)C++20
Compilation error
0 ms0 KiB
//#include "festival.h"
#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("avx2")
#define ll long long
#define ld long double
#define pii pair<int,int>
#define pll pair<ll,ll>
#define plx pair<ll,int>
#define f first
#define s second
#define pb push_back
#define all(x) x.begin(),x.end()
#define vi vector<int>
#define vvi vector<vi>
#define ub(x,i) upper_bound(all(x),i)-x.begin()
#define lb(x,i) lower_bound(all(x),i)-x.begin()
#define sz(x) (ll)x.size()
#define cd complex<double>
#define t3 tuple<ll,ll,ll>
using namespace std;
const int mxn=5e5+5,mxk=61;
vector<ll>qs,a,t,v,ord;
int n;
ll dp[mxn][mxk]{0};
ll pr[mxn][mxk]{0};
ll cal(ll x,int i){
    return min((ll)1e15,t[i]*(x-a[i]));
}
bool cmp(int i,int j){
    return a[i]*t[i]*(t[j]-1)<=a[j]*t[j]*(t[i]-1);
}
bool cmp2(int i,int j){
    return a[i]<a[j];
}
std::vector<int>max_coupons(int A, std::vector<int> P,std::vector<int> T){
    n=P.size();for(auto it:P)a.pb(it);for(auto it:T)t.pb(it);
    for(int i=0;i<n;i++){
        if(t[i]==1)qs.pb(a[i]),ord.pb(i);
        else v.pb(i);
    }sort(all(qs));for(int i=1;i<qs.size();i++)qs[i]+=qs[i-1];
    sort(all(v),cmp);sort(all(ord),cmp2);
    ll cur=A;vector<int>ans;
    for(auto it : v){
        if(cur<=cal(cur,it)){cur=cal(cur,it);ans.pb(it);}
        else break;
    }
    if(ans.size()==v.size()){
        int idx=ub(qs,cur);
        for(int i=0;i<idx;i++)ans.pb(ord[i]);
        return ans;
    }int l=ans.size(),r=v.size();
    dp[l][0]=cur;
    for(int i=1;i<mxk;i++)dp[l][i]=-1;
    for(int i=l+1;i<=r;i++){
        dp[i][0]=dp[i-1][0];
        for(int j=1;j<mxk;j++){
            dp[i][j]=dp[i-1][j];pr[i][j]=j;
            if(dp[i-1][j-1]!=-1&&cal(dp[i-1][j-1],v[i-1])>=dp[i][j])dp[i][j]=cal(dp[i-1][j-1],v[i-1]),pr[i][j]=j-1;
        }
    }int mx=0,mem=-1;
    for(int i=mxk-1;i>=0;i--){
        if(dp[r][i]>=0&&mx<(int)ans.size()+i+ub(qs,dp[r][i]))mx=(int)ans.size()+i+ub(qs,dp[r][i]),mem=i;
    }int cr=r,mem2=mem;stack<int>st;
    while(mem>0){
        if(pr[cr][mem]!=mem)st.push(v[cr-1]),mem--;
        cr--;
    }while(!st.empty())ans.pb(st.top()),st.pop();
    int idx=ub(qs,dp[r][mem2]);
    for(int i=0;i<idx;i++)ans.pb(ord[i]);
    return ans;
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    vector<int>x=max_coupons(20,{2,5,7,2,3,4,4,6,7,10},{4,3,1,3,2,1,4,2,2});
    for(auto it : x)cout<<it<<' ';
}

Compilation message (stderr)

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