Submission #481966

#TimeUsernameProblemLanguageResultExecution timeMemory
481966Lobo선물상자 (IOI15_boxes)C++17
70 / 100
2074 ms277096 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; const long long INFll = (long long) 1e18 + 10; const int INFii = (int) 1e9 + 10; typedef long long ll; typedef int ii; typedef long double dbl; #define endl '\n' #define sc second #define fr first #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() #define maxn 10000010 ii n, kt; ll dp1[maxn]; ii x1[maxn], x2[maxn]; long long delivery(int N, int K, int L, int p[]) { L--; n = N; kt = K; for(ii i = 1; i <= n; i++) { x1[i] = p[i-1]; x2[i] = L-x1[i]+1; } reverse(x2+1,x2+1+n); priority_queue<pair<ll,ii>, vector<pair<ll,ii>>, greater<pair<ll,ii>>> pq1; pq1.push(mp(0,0)); for(ii i = 1; i <= n; i++) { while(pq1.size() && pq1.top().sc < i-kt) pq1.pop(); dp1[i] = pq1.top().fr + x1[i] + min(x1[i],x2[n-i+1]); pq1.push(mp(dp1[i],i)); } ll ans = dp1[n]; priority_queue<pair<ll,ii>, vector<pair<ll,ii>>, greater<pair<ll,ii>>> pq2; pq2.push(mp(0,0)); for(ii i = 1; i <= n; i++) { while(pq2.size() && pq2.top().sc < i-kt) pq2.pop(); ans = min(ans,dp1[n-i]+pq2.top().fr + x2[i] + min(x1[n-i+1],x2[i])); pq2.push(mp(pq2.top().fr + x2[i] + min(x1[n-i+1],x2[i]),i)); } return ans; } // #include <bits/stdc++.h> // using namespace std; // const long long INFll = (long long) 1e18 + 10; // const int INFii = (int) 1e9 + 10; // typedef long long ll; // typedef int ii; // typedef long double dbl; // #define endl '\n' // #define sc second // #define fr first // #define mp make_pair // #define pb push_back // #define all(x) x.begin(), x.end() // #define maxn 1100 // ll n, kt; // ll mark1[maxn], dp1[maxn], x1[maxn]; // ll mark2[maxn], dp2[maxn], x2[maxn]; // ll sol1(ll i) { // if(i == 0) return 0; // if(dp1[i] != -1) return dp1[i]; // ll ans = INFll; // for(ii j = i-1; j >= i-kt && j >= 0; j--) { // ans = min(ans, sol1(j)); // } // return dp1[i] = ans + x1[i] + min(x1[i],x2[n-i+1]); // } // ll sol2(ll i) { // if(i == 0) return 0; // if(dp2[i] != -1) return dp2[i]; // ll ans = INFll; // for(ii j = i-1; j >= i-kt && j >= 0; j--) { // ans = min(ans, sol2(j)); // } // return dp2[i] = ans + x2[i] + min(x1[n-i+1],x2[i]); // } // int main() { // ios::sync_with_stdio(false); cin.tie(0); // //freopen("in.in", "r", stdin); // //freopen("out.out", "w", stdout); // ii N, K, L; // cin >> N >> K >> L; // vector<ii> p; // for(ii i = 0; i < N; i++) { // ii aa; cin >> aa; // p.pb(aa); // } // L--; // n = N; // kt = K; // for(ii i = 1; i <= n; i++) { // dp1[i] = dp2[i] = -1; // x1[i] = p[i-1]; // x2[i] = L-x1[i]+1; // } // reverse(x2+1,x2+1+n); // ll ans = INFll; // for(ii i = 0; i <= n; i++) { // ans = min(ans, (sol1(i)) + (sol2(n-i))); // } // cout << ans << 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...