제출 #993495

#제출 시각아이디문제언어결과실행 시간메모리
993495MarwenElarbiUplifting Excursion (BOI22_vault)C++17
20 / 100
5089 ms8280 KiB
#include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; //#pragma GCC optmize("O3") //#pragma GCC optmize("unroll-loops") #define fi first #define se second #define ll long long #define pb push_back #define int long long const int nax=205; vector<pair<int,int>> objects; void add(int x , int i) { while(x) { int msb = 31 - __builtin_clz(x); if(x == (1<<(msb + 1)) - 1) { for(int j = 0 ; j <= msb ; j++) { objects.pb({(1<<j) * i, (1<<j)}); } break; } int cur=0; for(int j = 0 ; j < msb ; j++) { cur+=(1<<j); objects.pb({(1<<j) * i , (1<<j)}); } x-=cur; } } vector<int> dp; const int INF = 1e18; signed main(){ int m , L; cin>>m>>L; int ans = 0; int MX=0; int MN=0; for(int i = -m ; i <= m ; i++) { int x; cin>>x; if(i>0) MX+=x*i; else MN-=x*i; if(i == 0){ ans=x; }else add(x , i); } MX=max(abs(MN),abs(MX)); MX++; dp.resize(2*MX); for(int i = -MX + 1 ; i <= MX - 1; i++) { dp[i + MX] = -INF; } dp[MX] = ans; sort(objects.begin(),objects.end()); for(auto c : objects){ if(c.fi > 0){ for(int j = MX - 1 ; j >= -MX + 1 ; j--) { if(j - c.fi >= -MX + 1) dp[j + MX] = max(dp[j+MX] , dp[j - c.fi + MX] + c.se); } }else { for(int j = -MX + 1 ; j <= MX - 1 ; j++) { if(j - c.fi <= MX - 1) { dp[j+ MX] = max(dp[j+ MX] , dp[j - c.fi+ MX] + c.se); } } } } if(L>=MX||L<=-MX) cout <<"impossible"<<endl; else if(dp[L+MX]<=0) cout <<"impossible"<<endl; else cout << dp[L+MX]<<endl; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...