Submission #267141

#TimeUsernameProblemLanguageResultExecution timeMemory
267141MKopchevDango Maker (JOI18_dango_maker)C++14
100 / 100
399 ms45112 KiB
#include<bits/stdc++.h> using namespace std; const int nmax=3e3+42; int n,m; int inp[nmax][nmax]; int horizontal[nmax*2],vertical[nmax*2]; bool check(int i,int j,int val) { return 1<=i&&i<=n&&1<=j&&j<=m&&inp[i][j]==val; } int main() { scanf("%i%i",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { char c=getchar(); while(c!='R'&&c!='G'&&c!='W')c=getchar(); if(c=='R')inp[i][j]=0; if(c=='G')inp[i][j]=1; if(c=='W')inp[i][j]=2; } int outp=0; for(int sum=1;sum<=n+m;sum++) { int mx=0; memset(horizontal,0,sizeof(horizontal)); memset(vertical,0,sizeof(vertical)); for(int i=1;i<=n;i++) { int j=sum-i; horizontal[i]=max(horizontal[i-1],i-3>=0?vertical[i-3]:0); vertical[i]=max(vertical[i-1],horizontal[i-1]); if(1<=j&&j<=m) { if(check(i,j,0)&&check(i,j+1,1)&&check(i,j+2,2))horizontal[i]=max(horizontal[i]+1,i-2>=0?vertical[i-2]:0); if(check(i,j,0)&&check(i+1,j,1)&&check(i+2,j,2))vertical[i]=max(vertical[i]+1,horizontal[i]); } mx=max(mx,horizontal[i]); mx=max(mx,vertical[i]); } outp+=mx; } printf("%i\n",outp); return 0; }

Compilation message (stderr)

dango_maker.cpp: In function 'int main()':
dango_maker.cpp:16:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   16 |     scanf("%i%i",&n,&m);
      |     ~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...