Submission #1326215

#TimeUsernameProblemLanguageResultExecution timeMemory
1326215hahahaFestival (IOI25_festival)C++20
0 / 100
40 ms9648 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define f first #define s second std::vector<signed> max_coupons(signed A, std::vector<signed> P, std::vector<signed> T){ int n=P.size(); pair<int,int> t1[n],t2[n]; int k1=-1,k2=-1; for(int i=0; i<n; i++){ if(T[i]==2){ t2[++k2].f=P[i]; t2[k2].s=i;} else{ t1[++k1].f=P[i]; t1[k1].s=i;} } k1++; k2++; sort(t1, t1+k1); sort(t2, t2+k2); for(int i=1; i<k1; i++) t1[i].f+=t1[i-1].f; int c=A; int m1=0,m2=0; int z=1e16; for(int i=0; i<=k2&&c>-1; i++){ int l=0, r=k1-1; int x; while(l<=r){ x=l+(r-l)/2; if(t1[x].f<=c&&t1[x+1].f>c) l=r+1; else if(t1[x].f<c) l=x+1; else r=x-1; } if((m1+m2)<i+x+1){ m1=x+1; m2=i; } c=min((c-t2[i].f)*2,z); } vector<signed> R; for( int i=0; i<m2; i++) R.push_back(t2[i].s); for(int i=0; i<m1; i++) R.push_back(t1[i].s); 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...