제출 #1283020

#제출 시각아이디문제언어결과실행 시간메모리
1283020lukasuliashvili축제 (IOI25_festival)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> #include "festival.h" using namespace std; #define int long long #define pb push_back #define rep(i,a,b) for(int i=a;i<b;i++) const int INF=1e18,MX=2e14,L=71; vector<int> max_coupons(int AA,vector<int>P,vector<int>T){ int A=AA; vector<array<int,3>> x; int n=P.size(); vector<array<int,2>> y; rep(i,0,n){ if(T[i]!=1)x.pb({P[i],T[i],i}); else y.pb({P[i],i}); } sort(x.begin(),x.end(),[&](array<int,3>b,array<int,3>c){ int v1=-b[0]*b[1]*c[1]-c[0]*c[1]; int v2=-c[0]*c[1]*b[1]-b[0]*b[1]; return v1>v2; }); sort(y.begin(),y.end()); int m=x.size(),k=y.size(); vector<vector<int>> dp(n+1,vector<int>(L,-INF)); vector<vector<int>> par(n+1,vector<int>(L,-1)); int ptr=0;bool bad=false; for(auto [p,t,_]:x){ if((A-p)*t>=A){ assert(!bad); A=(A-p)*t; A=min(A,MX); ptr++; }else bad=true; } rep(i,0,n+1)dp[i][0]=A; for(int i=ptr+1;i<=m;i++){ auto [p,t,_]=x[i-1]; rep(j,0,L){ if(dp[i-1][j]>=0){ dp[i][j]=dp[i-1][j]; par[i][j]=0; } } rep(j,0,L-1){ if(dp[i-1][j]>=p){ int val=(dp[i-1][j]-p)*t; val=min(val,MX); if(val>dp[i][j+1]){ dp[i][j+1]=val; par[i][j+1]=1; } } } } vector<int> pre(k+1,0); rep(i,1,k+1)pre[i]=pre[i-1]+y[i-1][0]; int ans=-1,id=-1,ok=-1; rep(i,0,L){ if(dp[m][i]>=0){ int val=i,l=0,r=k; while(l!=r){ int mid=(l+r+1)/2; if(pre[mid]<=dp[m][i])l=mid; else r=mid-1; } val+=l; if(val>ans)ans=val,id=i,ok=l; } } vector<int> vec; rep(i,0,ok)vec.pb(y[i][1]); for(int i=m;i>ptr;i--){ if(par[i][id]==1){ id--; vec.pb(x[i-1][2]); } } for(int i=ptr-1;i>=0;i--)vec.pb(x[i][2]); reverse(vec.begin(),vec.end()); return vec; }

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

/usr/bin/ld: /tmp/ccKx632u.o: in function `main':
grader.cpp:(.text.startup+0x22a): undefined reference to `max_coupons(int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status