Submission #608737

#TimeUsernameProblemLanguageResultExecution timeMemory
608737PyqePopeala (CEOI16_popeala)C++14
100 / 100
1108 ms10144 KiB
#include <bits/stdc++.h> using namespace std; #define mp make_pair #define fr first #define sc second const long long inf=1e18; long long n,m,d,a[20069],ps[20069],dp[20069],wg[69][20069],od[69]; bitset<20069> kd[69]; pair<long long,long long> ls[69]; deque<long long> dq[69]; int main() { long long i,j,r,k,l,sz; char ch; scanf("%lld%lld%lld",&m,&n,&d); for(i=1;i<=n;i++) { scanf("%lld",a+i); ps[i]=ps[i-1]+a[i]; } for(i=1;i<=m;i++) { for(j=1;j<=n;j++) { scanf(" %c",&ch); kd[i][j]=ch-'0'; } } for(i=1;i<=n;i++) { dp[i]=inf; } for(i=1;i<=d;i++) { for(j=0;j<=m;j++) { for(r=1;r<=n;r++) { wg[j][r]=dp[r-1]-ps[r-1]*j; } dq[j].clear(); od[j]=0; } for(j=1;j<=m;j++) { ls[j]={0,j}; } dp[0]=inf; for(j=1;j<=n;j++) { sz=0; for(r=1;r<=m;r++) { l=ls[r].sc; if(kd[l][j]) { sz++; ls[sz]=ls[r]; } } for(r=1;r<=m;r++) { if(!kd[r][j]) { sz++; ls[sz]={j,r}; } } dp[j]=inf; for(r=0;r<=m;r++) { k=ls[r].fr; l=j; if(r<m) { l=ls[r+1].fr; } for(;od[r]<l;) { od[r]++; for(;!dq[r].empty()&&wg[r][dq[r].back()]>=wg[r][od[r]];dq[r].pop_back()); dq[r].push_back(od[r]); } for(;!dq[r].empty()&&dq[r].front()<=k;dq[r].pop_front()); if(!dq[r].empty()) { dp[j]=min(dp[j],wg[r][dq[r].front()]+ps[j]*r); } } } printf("%lld\n",dp[n]); } }

Compilation message (stderr)

popeala.cpp: In function 'int main()':
popeala.cpp:20:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |  scanf("%lld%lld%lld",&m,&n,&d);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
popeala.cpp:23:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |   scanf("%lld",a+i);
      |   ~~~~~^~~~~~~~~~~~
popeala.cpp:30:9: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   30 |    scanf(" %c",&ch);
      |    ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...