Submission #1151987

#TimeUsernameProblemLanguageResultExecution timeMemory
1151987alexddAliens (IOI16_aliens)C++20
4 / 100
1 ms328 KiB
#include "aliens.h" #include<bits/stdc++.h> using namespace std; #define int long long const int INF = 1e18; pair<int,int> v[100005],newv[100005]; struct line { int b,m; int eval(int x){ return m*x + b; } }; double interx(line u, line v) { return (double)(v.b - u.b)/(double)(u.m - v.m); } pair<int,int> calc(int n, int k, int coef) { vector<pair<int,int>> dp(n+2,{INF,0}); dp[0]={0,0}; deque<pair<line,int>> hull; for(int i=1;i<=n;i++) { int u=i-1; line cur; if(v[u+1].second > v[u].first) { cur.b = dp[u].first + v[u+1].second*v[u+1].second + 1; cur.m = -2*v[u+1].second; } else { cur.b = dp[u].first + 2*v[u+1].second * (v[u].first+1) - v[u].first*(v[u].first+2); cur.m = -2*v[u+1].second; } while((int)hull.size()>1 && interx(hull.back().first,cur) <= interx(hull[(int)hull.size()-2].first,hull.back().first)) hull.pop_back(); hull.push_back({cur,dp[u].second}); while((int)hull.size()>1 && hull[0].first.eval(v[i].first+1) >= hull[1].first.eval(v[i].first+1)) hull.pop_front(); dp[i].first = hull[0].first.eval(v[i].first+1) + v[i].first*(v[i].first+2) + coef; dp[i].second = hull[0].second + 1; } return dp[n]; } long long take_photos(int32_t n, int32_t m, int32_t k, std::vector<int32_t> x, std::vector<int32_t> y) { for(int i=0;i<n;i++) { if(x[i] < y[i]) swap(x[i],y[i]); v[i+1] = {x[i],y[i]}; } sort(v+1,v+1+n); int newn=0; for(int i=1;i<=n;i++) if(i==1 || v[i]!=v[i-1]) newv[++newn] = v[i]; n = newn; for(int i=1;i<=n;i++) v[i] = newv[i]; newn=0; int cv=INF; for(int i=n;i>0;i--) { if(v[i].second < cv) { newv[++newn] = v[i]; cv = v[i].second; } } reverse(newv+1,newv+1+newn); n = newn; for(int i=1;i<=n;i++) v[i] = newv[i]; v[0] = {-1,-1}; k = min(k, n); int st=0,dr=INF,ans=-1; while(st<=dr) { int mij=(st+dr)/2; pair<int,int> aux = calc(n,k,mij); if(aux.second >= k) { ans = mij; st = mij+1; } else { dr = mij-1; } } pair<int,int> aux = calc(n,k,ans); assert(aux.second == k); return aux.first - ans*k; }

Compilation message (stderr)

aliens.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...