Submission #135925

#TimeUsernameProblemLanguageResultExecution timeMemory
135925ckodserAliens (IOI16_aliens)C++14
25 / 100
146 ms3832 KiB
#include "aliens.h" #include <algorithm> #include <bitset> #include <complex> #include <deque> #include <exception> #include <fstream> #include <functional> #include <iomanip> #include <ios> #include <iosfwd> #include <iostream> #include <istream> #include <iterator> #include <limits> #include <list> #include <locale> #include <map> #include <memory> #include <new> #include <numeric> #include <ostream> #include <queue> #include <set> #include <sstream> #include <stack> #include <stdexcept> #include <streambuf> #include <string> #include <typeinfo> #include <utility> #include <valarray> #include <vector> #if __cplusplus >= 201103L #include <array> #include <atomic> #include <chrono> #include <condition_variable> #include <forward_list> #include <future> #include <initializer_list> #include <mutex> #include <random> #include <ratio> #include <regex> #include <scoped_allocator> #include <system_error> #include <thread> #include <tuple> #include <typeindex> #include <type_traits> #include <unordered_map> #include <unordered_set> #endif #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=4100; const ll maxk=4010; const ll inf=1e9+900; ll tav2(ll x){return x*x;} vector<pii> vect; void add(ll x[],ll v[],ll n){ vect.clear(); for(ll i=0;i<n;i++){ vect.pb(mp(x[i],v[i])); if(i!=n-1 && v[i]>v[i+1])exit(1); } } ll findMinAt(ll t){ ll ans=inf; for(auto e:vect){ ans=min(ans,e.F+e.S*t); } return ans; } ll dp[maxn][maxk]; vector<pii> vec; ll XX[maxn]; ll X[maxn]; ll V[maxn]; ll mx[maxn]; 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]); } stack<ll> stk; for(ll i=0;i<n;i++){ while(stk.size() && mx[stk.top()]>=mx[i]){ stk.pop(); } if(mx[i]!=inf){ stk.push(i); } } while(stk.size()){ vec.pb(mp(stk.top(),mx[stk.top()])); stk.pop(); } sort(vec.begin(),vec.end()); XX[0]=tav2(vec[0].S); V[0]=vec[0].S; for(ll i=0;i+1<vec.size();i++){ XX[i+1]=-tav2(max(0,vec[i].F-vec[i+1].S+1))+tav2(vec[i+1].S); V[i+1]=vec[i+1].S; } for(ll i=0;i<vec.size();i++){ vec[i].F++; } for(ll i=0;i<vec.size();i++){ dp[i][0]=inf; } for(ll j=1;j<=k;j++){ X[0]=XX[0]; for(ll i=1;i<vec.size();i++){ X[i]=XX[i]+dp[i-1][j-1]; } add(X,V,vec.size()); for(ll i=0;i<vec.size();i++){ dp[i][j]=findMinAt(-2*vec[i].F)+tav2(vec[i].F); } } return dp[vec.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:123:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(ll i=0;i+1<vec.size();i++){
             ~~~^~~~~~~~~~~
aliens.cpp:127:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(ll i=0;i<vec.size();i++){
             ~^~~~~~~~~~~
aliens.cpp:130:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(ll i=0;i<vec.size();i++){
             ~^~~~~~~~~~~
aliens.cpp:135:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(ll i=1;i<vec.size();i++){
              ~^~~~~~~~~~~
aliens.cpp:139:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(ll i=0;i<vec.size();i++){
              ~^~~~~~~~~~~
#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...