Submission #80436

#TimeUsernameProblemLanguageResultExecution timeMemory
80436Bodo171Aliens (IOI16_aliens)C++14
4 / 100
5 ms700 KiB
#include "aliens.h" #include <iostream> #include <algorithm> #include <utility> const int nmax=100005; using namespace std; struct in { int l,r; }v[nmax]; typedef long long ld; bool operator <(in unu,in doi) { if(unu.l==doi.l) return unu.r>doi.r; return unu.l<doi.l; } struct funct { ld a,b; int cate; void it(ld A,ld B,int c) { this->a=A; this->b=B; this->cate=c; } ld eval(ld x) { return a*x+b; } }f,st[nmax]; int p,u,i,N; ld L,R; pair<ld,int> dp[nmax]; long double a1,a2,b1,b2; long double in(funct unu,funct doi) { a1=unu.a;a2=doi.a;b1=unu.b;b2=doi.b; return (b2-b1)/(a1-a2); } void ins() { while(u>p&&in(f,st[u-1])<in(st[u-1],st[u])) u--; st[++u]=f; } void gt(ld x) { while(p<u&&in(st[p],st[p+1])<(long double)x) p++; dp[i]={1LL*st[p].eval(x),st[p].cate}; dp[i].first+=1LL*x*x; } int get(ld C) { p=1,u=0; int pp=0; long double len=0; for(i=1;i<=N;i++) { L=v[i].l-1;R=v[i].r; if(i>1)len=v[i-1].r-v[i].l+1; else len=0; if(len<0) len=0; f.it(-2*L,L*L+dp[i-1].first+C-len*len,dp[i-1].second+1); ins(); gt(R); } return dp[N].second; } long long take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c) { for(i=0;i<n;i++) { r[i]++,c[i]++; v[i+1].l=min(r[i],c[i]); v[i+1].r=max(r[i],c[i]); } sort(v+1,v+n+1); int mx=-1,nr=0; for(i=1;i<=n;i++) { if(mx<v[i].r) { v[++nr]=v[i]; } mx=max(mx,v[i].r); } N=n=nr; if(N<=k) { int ct=get(0); long long ans=dp[N].first; return ans; } ld ll,rr,mid,kk=k; ll=0;rr=1LL*1e16; for(int cnt=1;cnt<=200;cnt++) { mid=(ll+rr)/2; if(get(mid)<=k) rr=mid; else ll=mid; } int ct=get(ll); long long ans=(long long)(dp[N].first-kk*ll); return ans; }

Compilation message (stderr)

aliens.cpp: In function 'int get(ld)':
aliens.cpp:57:9: warning: unused variable 'pp' [-Wunused-variable]
     int pp=0;
         ^~
aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:91:13: warning: unused variable 'ct' [-Wunused-variable]
         int ct=get(0);
             ^~
aliens.cpp:103:9: warning: unused variable 'ct' [-Wunused-variable]
     int ct=get(ll);
         ^~
#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...