This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |