Submission #298444

#TimeUsernameProblemLanguageResultExecution timeMemory
298444zoooma13Aliens (IOI16_aliens)C++14
60 / 100
2049 ms7020 KiB
#include "bits/stdc++.h" #include "aliens.h" using namespace std; struct line{ long long m ,c; long long eva(long long x) { return m * x + c; } long double intersectX(line l) { return (long double)(c - l.c)/(l.m - m); } }; struct hull:deque<line>{ void add(long long m ,long long b){ line cur{m ,b}; while(size() >= 2 && cur.intersectX(front()) <= front().intersectX(at(1))) pop_front(); push_front({m ,b}); } long long eval(long long x){ while(size() >= 2 && back().eva(x) >= at(size()-2).eva(x)) pop_back(); return back().eva(x); } }; long long sqr(long long num){ return num*num; } long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) { vector <pair<int ,int>> rngs ,po; for(int i=0; i<n; i++){ if(r[i] < c[i]) swap(r[i] ,c[i]); rngs.push_back({c[i] ,-r[i]}); } sort(rngs.begin() ,rngs.end()); int mx = -1; for(auto&r : rngs) if(-r.second > mx){ po.push_back({r.first ,-r.second+1}); mx = -r.second; } po.insert(po.begin() ,make_pair(-1 ,0)); n = po.size(); vector <long long> dp(n ,1e18) ,exdp(n ,1e18); dp[0] = 0 ,exdp[0] = 0; while(k--){ swap(dp ,exdp); hull h; for(int i=1; i<n; i++){ h.add(-2*po[i].first ,exdp[i-1] + sqr(po[i].first) - sqr(max(0 ,po[i-1].second-po[i].first))); dp[i] = sqr(po[i].second) + h.eval(po[i].second); ///for(int j=0; j<i; j++) /// dp[i] = min(dp[i] ,exdp[j] + sqr(po[i].second-po[j+1].first+1) - sqr(max(0 ,po[j].second-po[j+1].first+1))); } } return dp.back(); }
#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...