제출 #889370

#제출 시각아이디문제언어결과실행 시간메모리
889370ASN49KAliens (IOI16_aliens)C++14
12 / 100
91 ms600 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,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; }*/ for(int i=n-1;i>=_;i--) { dp[i]=pow2(a[i].r-a[0].l+1); for(int j=i-1;j>=0;j--) { dp[i]=min(dp[i],pow2(a[i].r)-2*(a[j+1].l-1)*a[i].r+pow2(a[j+1].l-1)+pow2(max(0,a[j].r-a[j+1].l+1))+dp[j]); } } } 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...