Submission #290217

#TimeUsernameProblemLanguageResultExecution timeMemory
290217shayan_pAliens (IOI16_aliens)C++17
25 / 100
88 ms4608 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(int n, ll c){ for(int i = n-1; i >= 0; i--){ if(mn[i] > i){ dp[i] = dp[i+1]; continue; } dp[i] = {inf, inf}; for(int j = i; j < n; j++) dp[i] = min(dp[i], (pll){ dp[j+1].F + f(j - mn[i] + 1) - f(i - mn[i]) + c, dp[j+1].S + 1 }); } return dp[0]; } ll take_photos(int m, int n, int k, vector<int> X, vector<int> Y){ for(int i = 0; i <= n; i++){ mn[i] = n + 10; } for(int i = 0; i < m; i++){ if(X[i] > Y[i]) swap(X[i], Y[i]); mn[Y[i]] = min(mn[Y[i]], X[i]); } for(int i = n-1; i >= 0; i--){ mn[i] = min(mn[i], mn[i+1]); } ll l = -1, r = inf; while(r-l > 1){ ll mid = (l+r) >> 1; pll p = solve(n, mid); if(p.S > k) l = mid; else r = mid; } pll p = solve(n, 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...