Submission #440269

#TimeUsernameProblemLanguageResultExecution timeMemory
440269sebamarinAliens (IOI16_aliens)C++14
25 / 100
2079 ms78904 KiB
#include<bits/stdc++.h> using namespace std; // #define COMPILE 1 // #define DEBUG 1 typedef long long ll; typedef pair<ll,ll> ii; #define db(x) cout<<#x<<" = "<<x<<"\n"; #define fore(i,a,b) for(ll i=a,ggdem=b;i<ggdem;i++) #define FIN ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) #define SZ(a) ((ll)(a).size()) #define ALL(a) a.begin(),a.end() #define mset(a,b) memset(a,b,sizeof(a)); #define pb push_back #define fst first #define snd second mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); // x,y -> -y,x ll sq(ll x){return x*x;} const ll N=4010,INF=1e18; ll n,m,k,h,to[N],vis[N],qid,mat[N][N]; ii dp[N]; vector<ii>v; ii solve(ll i) { if(i==n)return {0ll,0ll}; if(vis[i]==qid)return dp[i]; vis[i]=qid; ii res={INF,INF}; fore(k,i,n) { ii a=solve(k+1); ll bc=mat[i][k]; res=min(res,{a.fst+bc+h,a.snd+1}); // cout<<i<<" to "<<k<<" with "<<cost<<" "<<a.fst<<"+"<<b<<"-"<<c<<"+"<<h<<endl; } return dp[i]=res; } ii get_solve(ll alien) { h=alien,qid++; return solve(0); } ll take_photos(int _n,int _m,int _k,vector<int>r,vector<int> c) { n=_n,m=_m,k=_k; map<ll,ll>mp; fore(i,0,n){ if(r[i]>c[i])swap(r[i],c[i]); v.pb({r[i],c[i]}); ll pr=mp[r[i]]; mp[r[i]]=max(pr,1ll*c[i]); } sort(ALL(v)); v.pb({INF,INF}); ll y=0; fore(i,0,n) { y=max(y,mp[v[i].fst]); to[i]=y; } #ifdef DEBUG cout<<"v: "<<endl;for(auto it:v)cout<<it.fst<<" "<<it.snd<<endl;cout<<"n: "<<n<<endl; cout<<"to: ";fore(i,0,n) cout<<to[i]<<" ";cout<<endl; #endif // fore(i,0,20) { // cout<<i<<" : "<<get_solve(i).fst<<" "<<get_solve(i).snd<<endl; // } fore(i,0,n)fore(j,i,n)mat[i][j]=sq(to[j]-v[i].fst+1)-sq(max(0ll,to[j]-v[j+1].fst+1)); ll ml=0,mr=sq(m+1)+10ll; while(ml<=mr) { h=(ml+mr)/2,qid++; if(solve(0).snd<=k)mr=h-1; else ml=h+1; } #ifdef DEBUG cout<<"done: "<<ml<<" "<<mr<<endl; #endif h=ml,qid++; ii res=solve(0); // cout<<ml<<" : "<<res.fst<<" "<<res.snd<<endl; return res.fst-ml*k; } #ifdef COMPILE int main() {FIN; cin>>n>>m>>k; vector<int>r(n),c(n); fore(i,0,n)cin>>r[i]>>c[i]; cout<<take_photos(n,m,k,r,c)<<"\n"; } #endif
#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...