Submission #1254994

#TimeUsernameProblemLanguageResultExecution timeMemory
1254994NemanjaSo2005Festival (IOI25_festival)C++20
32 / 100
89 ms8484 KiB
#include "festival.h" #include<bits/stdc++.h> #define ll long long #define f first #define s second using namespace std; const int maxn=2e5+5; vector<pair<ll,int>> koji[5]; const ll inf=1e18; int n; ll cur,pok[5]; ll perform(ll x,pair<ll,ll> sta){ return max(min(inf,(x-sta.f)*sta.s),-inf/10); } std::vector<int> max_coupons(int A, std::vector<int> P, std::vector<int> T) { n=P.size(); for(int i=1;i<=4;i++) pok[i]=1; for(int i=1;i<=4;i++) koji[i].push_back({0,0}); for(int i=0;i<n;i++) koji[T[i]].push_back({P[i],i}); for(int i=1;i<=4;i++) sort(koji[i].begin(),koji[i].end()); ll cur=A; vector<int> R; while(true){ vector<pair<int,int>> M; for(int i=1;i<=4;i++) if(pok[i]<koji[i].size() and cur>=koji[i][pok[i]].f){ M.push_back({koji[i][pok[i]].f,i}); } /* cout<<M.size()<<endl; for(auto x:M) cout<<x.f<<" "<<x.s<<" | "; cout<<endl;*/ if(M.size()==0) break; sort(M.begin(),M.end()); ll bs=-1e18; int radi=-1; do{ ll tmp=cur; for(auto x:M) tmp=perform(tmp,x); if(tmp>bs){ bs=tmp; radi=M[0].second; } } while(next_permutation(M.begin(),M.end())); //cout<<radi<<" "<<pok[radi]<<endl; cur=perform(cur,{koji[radi][pok[radi]].f,radi}); R.push_back(koji[radi][pok[radi]].s); pok[radi]++; } return R; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...