제출 #889428

#제출 시각아이디문제언어결과실행 시간메모리
889428ASN49KAliens (IOI16_aliens)C++17
25 / 100
4 ms504 KiB
#include <bits/stdc++.h> #include "aliens.h" using namespace std; using i64=long long; const i64 INF=1e18; #define bug(x) cerr<<#x<<x<<'\n'; #define all(yy) yy.begin(),yy.end() #define pb push_back const int inf=1e9; struct duo { int l,r; bool operator <(const duo&b)const { if(l==b.l) { return r>b.r; } return l<b.l; } }; ////////////////////////////GEOMETRY //////////////////////////////////// struct line { i64 a,b; i64 calculate(int x) { return a*x+b; } }; i64 intersect(const line& c,const line& d) { return (d.b-c.b+c.a-d.a-1)/(c.a-d.a); } struct CHT { deque<line>d; void add(const line e) { while(d.size()>=2 && intersect(d[d.size()-2],d.back())>=intersect(d.back(),e)) { d.pop_back(); } d.pb(e); } i64 query(int val) { while(d.size()>=2 && d[0].calculate(val)>=d[1].calculate(val)) { d.pop_front(); } return d[0].calculate(val); } void clear() { d.clear(); } }; i64 pow2(i64 x) { return x*x; } ///////////////////////////////////////////////////// ///////////////////////////////////////////////////// i64 take_photos(int n, int m, int k, vector<int> rr, vector<int> cc) { vector<duo>a(n); for(int i=0;i<n;i++) { a[i]={min(rr[i],cc[i]),max(rr[i],cc[i])}; } vector<duo>aux=a; a.clear(); sort(all(aux)); int maxx=-1; for(auto &c:aux) { if(c.r>maxx) { a.pb(c); maxx=c.r; } } aux.clear(); n=(int)a.size(); vector<i64>dp(n+1,inf); for(int _=0;_<k;_++) { CHT cht; cht.add({-2*(a[0].l-1),pow2(a[0].l-1)}); for(int i=0;i<n;i++) { i64 sol=pow2(a[i].r)+cht.query(a[i].r); if(i!=n-1) { cht.add({-2*(a[i+1].l-1) , pow2(a[i+1].l-1)-pow2(max(0,a[i].r-a[i+1].l+1))+dp[i]}); } dp[i]=sol; } } return dp[n-1]; }
#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...