제출 #290225

#제출 시각아이디문제언어결과실행 시간메모리
290225shayan_pAliens (IOI16_aliens)C++17
41 / 100
2074 ms3440 KiB
#include<bits/stdc++.h> #include "aliens.h" #define F first #define S second #define PB push_back #define sz(s) (int(s.size())) #define bit(n, k) (((n)>>(k)) & 1) using namespace std; typedef pair<int, int> pii; typedef long long ll; typedef pair<ll, ll> pll; const int maxn = 1e5 + 10, mod = 1e9 + 7; const ll inf = 1e13 + 10, INF = 1e18; pll dp[maxn]; int mn[maxn]; ll f(int ln){ return 1ll * ln * ln; } pll solve(vector<pii> &seg, ll c){ for(int i = 1; i <= sz(seg); i++){ int mn = i == sz(seg) ? (seg[i-1].S + 1) : seg[i].F; mn = min(mn, seg[i-1].S + 1); dp[i] = {INF, INF}; for(int j = 0; j < i; j++){ dp[i] = min(dp[i], (pll){ dp[j].F + f(seg[i-1].S - seg[j].F + 1) - f(seg[i-1].S - mn + 1) + c, dp[j].S + 1 }); } } return dp[sz(seg)]; } ll take_photos(int m, int n, int k, vector<int> X, vector<int> Y){ vector<pii> _seg, seg; for(int i = 0; i < m; i++){ if(X[i] > Y[i]) swap(X[i], Y[i]); _seg.PB({X[i], Y[i]}); } sort(_seg.begin(), _seg.end()); for(pii p : _seg){ if(seg.empty() || seg.back().S < p.S) seg.PB(p); } ll l = -1, r = inf; while(r-l > 1){ ll mid = (l+r) >> 1; pll p = solve(seg, mid); if(p.S > k) l = mid; else r = mid; } pll p = solve(seg, r); return 1ll * p.F - 1ll * k * 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...