Submission #590806

#TimeUsernameProblemLanguageResultExecution timeMemory
590806andrei_boacaPopeala (CEOI16_popeala)C++14
0 / 100
423 ms9336 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") using namespace std; int dp[20005][55],rmq[20005][55][16],vals[20005],loga[20005]; int n,t,S; int val[20005]; bool have[55][20005]; int nxt[55][20005],s[20005]; bool bad[55]; int mycost[55]; int getmin(int st,int dr,int k) { int l=loga[dr-st+1]; int rez=min(rmq[st][k][l],rmq[dr-(1LL<<l)+1][k][l]); return rez; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>t>>S; for(int i=1;i<=t;i++) { for(int j=0;j<=15;j++) if((1LL<<j)<=i) loga[i]=j; } for(int i=1;i<=t;i++) { cin>>val[i]; s[i]=s[i-1]+val[i]; } for(int i=1;i<=n;i++) for(int j=1;j<=t;j++) { char c; cin>>c; have[i][j]=c-'0'; } for(int i=1;i<=n;i++) { nxt[i][0]=0; for(int j=1;j<=t;j++) { nxt[i][j]=nxt[i][j-1]; if(!have[i][j]) nxt[i][j]=j; } /*for(int j=1;j<=t;j++) cout<<nxt[i][j]<<' '; cout<<'\n';*/ } dp[0][0]=0; for(int i=1;i<=S;i++) dp[0][i]=2e9; for(int i=1;i<=t;i++) dp[i][0]=2e9; for(int k=0;k<=n;k++) { for(int i=0;i<=t;i++) vals[i]=dp[i][0]-k*s[i]; for(int i=t;i>=0;i--) { rmq[i][k][0]=vals[i]; for(int j=1;j<=loga[t-i+1];j++) { int poz=i+(1LL<<(j-1))-1; rmq[i][k][j]=rmq[i][k][j-1]; if(poz+1<=t) rmq[i][k][j]=min(rmq[i][k][j],rmq[poz+1][k][j-1]); } } } for(int a=1;a<=S;a++) { for(int i=1;i<=t;i++) { dp[i][a]=2e9; /*for(int k=i-1;k>=0;k--) dp[i][j]=min(dp[i][j],dp[k][j-1]+cost[k+1][i]);*/ } vector<int> mypoz; for(int i=1;i<=t;i++) { dp[i][a]=2e9; int cnt=n; mypoz.clear(); for(int j=1;j<=n;j++) mypoz.push_back(nxt[j][i]); sort(mypoz.begin(),mypoz.end()); reverse(mypoz.begin(),mypoz.end()); int cur=i; for(int j=0;j<mypoz.size();j++) { int poz=mypoz[j]; int st=poz; int dr=cur-1; if(st<=dr) { int nr=getmin(st,dr,cnt)+cnt*s[i]; dp[i][a]=min(dp[i][a],nr); } cur=poz; cnt--; } int st=0; int dr=cur-1; if(st<=dr) { int nr=getmin(st,dr,cnt)+cnt*s[i]; dp[i][a]=min(dp[i][a],nr); } } for(int k=0;k<=n;k++) { for(int i=0;i<=t;i++) vals[i]=dp[i][a]-k*s[i]; for(int i=t;i>=0;i--) { rmq[i][k][0]=vals[i]; for(int j=1;j<=loga[t-i+1];j++) { int poz=i+(1LL<<(j-1))-1; rmq[i][k][j]=rmq[i][k][j-1]; if(poz+1<=t) rmq[i][k][j]=min(rmq[i][k][j],rmq[poz+1][k][j-1]); } } } } for(int i=1;i<=S;i++) cout<<dp[t][i]<<'\n'; return 0; }

Compilation message (stderr)

popeala.cpp: In function 'int main()':
popeala.cpp:93:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |             for(int j=0;j<mypoz.size();j++)
      |                         ~^~~~~~~~~~~~~
popeala.cpp:26:23: warning: array subscript 32768 is above array bounds of 'int [20005]' [-Warray-bounds]
   26 |                 loga[i]=j;
      |                 ~~~~~~^
popeala.cpp:4:50: note: while referencing 'loga'
    4 | int dp[20005][55],rmq[20005][55][16],vals[20005],loga[20005];
      |                                                  ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...