Submission #759822

#TimeUsernameProblemLanguageResultExecution timeMemory
759822jay_jayjayFeast (NOI19_feast)C++14
100 / 100
294 ms14092 KiB
// {{{1 extern "C" int __lsan_is_turned_off() { return 1; } #include <stdio.h> #include <stdlib.h> #include <math.h> #include <vector> #include <algorithm> #include <set> #include <map> #include <string> #include <iostream> #include <deque> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define infl 0x3f3f3f3f3f3f3f3f #define ninf 0xbebebebe #define ninfl 0xbebebebebebebebe #ifdef DEBUG #define dprintf(args...) fprintf(stderr,args) #include <assert.h> #endif #ifndef DEBUG #define dprintf(args...) 69 #define assert(args...) 42 #endif // 1}}} int main() { int n,nk;scanf("%d %d",&n,&nk); dprintf("n=%d nk=%d\n",n,nk); vector<int> a(n);for(auto&x:a)scanf("%d",&x); /* vector<vector<ll>> dp(nk+1, vector<ll>(n,0)); for(int i=0;i<n;i++)dp[0][i] = 0; for(int k=1;k<=nk;k++) { ll x=0; for(int i=0;i<n;i++) { if(i)x = max(x,dp[k-1][i-1]); dp[k][i] = (x += a[i]); if(i) dp[k][i] = max(dp[k][i],dp[k][i-1]); else dp[k][i] = max(0ll,dp[k][i]); } } */ auto dp = [&](ll B) { vector<ll> dp(n), cnt(n); /* let dp_B [i] = best cost for [0...i] // given cnt[i] subarrays, // where each subarray costs B // // dp\[-1] = 0 // dp\[i] = max( dp\[i-1], -\ + max [j<=i] (dp\[j-1] + sum a_j..i ) ) */ ll x=0,cx=0; // represents max[j<=i] dp[j-1]+sum a_j..i for(int i=0;i<n;i++) { dp[i] = i?dp[i-1]:0; cnt[i]=i?cnt[i-1]:0; x+=a[i]; //printf("x=%lld cx=%lld B=%lld x-B=%lld\n",x,cx,B,x-B); if(x-B > dp[i]) dp[i]=x-B, cnt[i]=cx+1; if(dp[i]>x) x=dp[i],cx=cnt[i]; //dp[i] = max(i?dp[i-1]:0, (x+=a[i]) - B); //x=max(x, dp[i]); //printf("i=%d dp=%lld cnt=%lld\n",i,dp[i],cnt[i]); } //printf("n-1=%d dp=%lld cnt=%lld\n",n-1,dp[n-1],cnt[n-1]); return pair<vector<ll>,vector<ll>>{dp, cnt}; }; ll lB = 0, rB = 1e18; while(lB<rB) { ll mB = lB+(rB-lB)/2; dprintf("B %lld %lld %lld\n",lB,mB,rB); auto [Bdp, cnt] = dp(mB); dprintf("cnt %lld\n",cnt[n-1]); if(cnt[n-1] > nk) lB=mB+1; else rB=mB; } auto [Bdp, cnt] = dp(lB); //for(auto x:Bdp)printf("%lld ",x);printf("\n"); //for(auto x:cnt)printf("%lld ",x);printf("\n"); dprintf("%lld %lld %lld\n",Bdp[n-1],lB,nk); printf("%lld\n",Bdp[n-1] + lB * nk); //printf("%lld\n",dp[nk][n-1]); }

Compilation message (stderr)

feast.cpp: In function 'int main()':
feast.cpp:27:26: warning: statement has no effect [-Wunused-value]
   27 | #define dprintf(args...) 69
      |                          ^~
feast.cpp:36:9: note: in expansion of macro 'dprintf'
   36 |         dprintf("n=%d nk=%d\n",n,nk);
      |         ^~~~~~~
feast.cpp:27:26: warning: statement has no effect [-Wunused-value]
   27 | #define dprintf(args...) 69
      |                          ^~
feast.cpp:81:17: note: in expansion of macro 'dprintf'
   81 |                 dprintf("B %lld %lld %lld\n",lB,mB,rB);
      |                 ^~~~~~~
feast.cpp:82:22: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   82 |                 auto [Bdp, cnt] = dp(mB);
      |                      ^
feast.cpp:27:26: warning: statement has no effect [-Wunused-value]
   27 | #define dprintf(args...) 69
      |                          ^~
feast.cpp:83:17: note: in expansion of macro 'dprintf'
   83 |                 dprintf("cnt %lld\n",cnt[n-1]);
      |                 ^~~~~~~
feast.cpp:88:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   88 |         auto [Bdp, cnt] = dp(lB);
      |              ^
feast.cpp:27:26: warning: statement has no effect [-Wunused-value]
   27 | #define dprintf(args...) 69
      |                          ^~
feast.cpp:91:9: note: in expansion of macro 'dprintf'
   91 |         dprintf("%lld %lld %lld\n",Bdp[n-1],lB,nk);
      |         ^~~~~~~
feast.cpp:35:23: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |         int n,nk;scanf("%d %d",&n,&nk);
      |                  ~~~~~^~~~~~~~~~~~~~~~
feast.cpp:37:44: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |         vector<int> a(n);for(auto&x:a)scanf("%d",&x);
      |                                       ~~~~~^~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...