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...