Submission #141678

#TimeUsernameProblemLanguageResultExecution timeMemory
141678mariusnicoliCover (COCI18_cover)C++14
96 / 120
18 ms2040 KiB
#include <iostream> #include <set> using namespace std; struct elem { long long x; long long y; }; struct dreptunghi { long long dimx; long long dimy; }; set<pair<long long, long long> > s; elem v[20010]; dreptunghi d[20010]; long long dp[20010]; long long n, k, i, x, y, minim, maxim, sol; long long sp[20010], SP[20010]; int main () { cin>>n; for (i=1;i<=n;i++) { cin>>x>>y; s.insert(make_pair(x, y)); s.insert(make_pair(-x, y)); s.insert(make_pair(x, -y)); s.insert(make_pair(-x, -y)); } n = 0; for (set<pair<long long, long long> >::iterator it = s.begin(); it!=s.end(); it++) { v[++n].x = it->first; v[n].y = it->second; } minim = v[1].y; maxim = v[1].y; for (i=2;i<=n;i++) { if (v[i].x > 0) break; if (v[i].x == v[i-1].x) { maxim = max(maxim, v[i].y); minim = min(minim, v[i].y); } else { if (k == 0 || maxim-minim > d[k-1].dimy) { d[++k].dimx = -v[i-1].x*2; d[k].dimy = maxim - minim; maxim = v[i].y; minim = v[i].y; } } } if (k == 0 || maxim-minim > d[k].dimy) { d[++k].dimx = -v[i-1].x * 2; d[k].dimy = maxim - minim; } sp[1] = d[1].dimx * d[1].dimy; for (i=2;i<=k;i++) sp[i] = d[i].dimx * d[i].dimy + sp[i-1]; SP[k] = d[k].dimx * d[k].dimy; for (i=k-1;i>=1;i--) SP[i] = d[i].dimx * d[i].dimy + SP[i+1]; /** minx = -d[1].dimx/2; maxx = -minx miny = -d[k].dimy/2; maxy = -miny; **/ ///sol = d[1].dimx * d[k].dimy; for (i=1;i<=k;i++) { dp[i] = d[1].dimx*d[i].dimy; for (long long j=i;j>=2;j--) { dp[i] = min(dp[i], dp[j-1] + d[j].dimx * d[i].dimy); } } cout<<dp[k]; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...