Submission #135649

#TimeUsernameProblemLanguageResultExecution timeMemory
135649ckodserAliens (IOI16_aliens)C++14
0 / 100
2 ms504 KiB
#include "aliens.h" #include<bits/stdc++.h> #define ll int #define pb push_back #define mp make_pair #define ld long double #define F first #define S second #define pii pair<ll,ll> using namespace :: std; const ll maxn=100; const ll maxk=110; const ll inf=1e9+900; const ll logg=20; ll tav2(ll x){ return x*x; } ll mx[maxn]; ll dp[maxn][maxk]; vector<ll> imp; ll ff[maxn][logg]; ll tt[maxn]; ll C[maxn][maxn]; ll findMn(ll l,ll r){ if(l<0)l=0; if(r>=maxn)r=maxn-1; if(l>r)return 0; ll tol=r-l+1; return min(ff[l][tt[tol]],ff[r-(1<<tt[tol])+1][tt[tol]]); } ll cost(ll i,ll x){ ll t=findMn(x+1,i); if(t>x || mx[x]>=t){ return tav2(i-t+1); } return tav2(i-t+1)-tav2(x-t+1); } void update(ll j,ll l,ll r,ll L,ll R){ if(l>=r)return; ll mid=(l+r)/2; if(mid==0){ dp[0][j]=0; return ; } pii best=mp(inf,inf); for(ll i=L;i<R ;i++){ best=min(best,mp(dp[i][j-1]+C[i][mid],i)); } dp[mid][j]=best.F; update(j,l,mid,L,best.S+1); update(j,mid+1,r,best.S,R); } long long take_photos(int n, int m, int k, vector<int> r, vector<int> c) { swap(n,m); fill(mx,mx+maxn,inf); for(ll i=0;i<m;i++){ if(c[i]>r[i]){ swap(c[i],r[i]); } mx[r[i]]=min(mx[r[i]],(ll)c[i]); } for(ll i=0;i<n;i++){ ff[i][0]=mx[i]; } tt[1]=0; for(ll i=2;i<maxn;i++){ tt[i]=tt[i/2]+1; } for(ll i=1;i<logg;i++){ for(ll j=0;j<n;j++){ ll res=j+(1<<(i-1)); if(res>=n){ ff[j][i]=ff[j][i-1]; }else{ ff[j][i]=min(ff[j][i-1],ff[res][i-1]); } } } imp.pb(0); for(ll i=1;i<=n;i++){ if(mx[i-1]!=inf)imp.pb(i); dp[i][0]=inf; } for(ll i=0;i<imp.size();i++){ for(ll j=0;j<i;j++){ C[j][i]=cost(imp[i]-1,imp[j]-1); } for(ll j=i;j<imp.size();j++){ C[j][i]=inf; } } for(ll j=1;j<=k;j++){ update(j,0,imp.size(),0,imp.size()); } return dp[imp.size()-1][k]; }

Compilation message (stderr)

aliens.cpp: In function 'long long int take_photos(int, int, int, std::vector<int>, std::vector<int>)':
aliens.cpp:90:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(ll i=0;i<imp.size();i++){
                ~^~~~~~~~~~~
aliens.cpp:94:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(ll j=i;j<imp.size();j++){
             ~^~~~~~~~~~~
#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...