제출 #1289843

#제출 시각아이디문제언어결과실행 시간메모리
1289843dodopasaDango Maker (JOI18_dango_maker)C++20
0 / 100
1 ms576 KiB
#include <bits/stdc++.h>
#define int long long
//#define cout cout << "Test: "
using namespace std;
void solve(){
    int n,m;cin>>n>>m;
    char yat[n][m];
    char dik[n][m];
    char arr[n][m];
    int rgw=0;
    
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>arr[i][j];
            dik[i][j]='0';
            yat[i][j]='0';
        }
    }
    
    if(n<3&&m<3){
        cout<<0;
        return;
    }
    
    int is_rgw=0;
    for(int i=0;i<n;i++){
        is_rgw=0;
        for(int j=0;j<m;j++){
            if(arr[i][j]=='R'){
                is_rgw=1;
                //cout<<i<<' '<<j<<endl;
                continue;
            }
            else if(is_rgw==1&&arr[i][j]=='G'){
                is_rgw++;
                //cout<<i<<' '<<j<<endl;
                continue;
            }
            else if(is_rgw==2&&arr[i][j]=='W'){
                rgw++;
                is_rgw=0;
                yat[i][j-2]='R';
                yat[i][j-1]='G';
                yat[i][j]='W';
                //cout<<"bbbbbbbbb "<<i<<' '<<j<<endl;
                continue;
            }
            else{
                is_rgw=0;
                continue;
            }
        }    
    }
    
    for(int j=0;j<m;j++){
        is_rgw=0;
        for(int i=0;i<n;i++){
            
            if(arr[i][j]=='R'){
                is_rgw=1;
                
            }
            else if(is_rgw==1&&arr[i][j]=='G'){
                is_rgw++;
                
            }
            else if(is_rgw==2&&arr[i][j]=='W'){
                rgw++;
                is_rgw=0;
                dik[i-2][j]='R';
                dik[i-1][j]='G';
                dik[i][j]='W';
                //cout<<"aaaaaaa "<<i<<' '<<j<<endl;
                
            }
            else{
                is_rgw=0;
            }
        }    
    }
    
    if(n<3){
        cout<<rgw;
        return;
    }
    else if(m<3){
        cout<<rgw;
        return;
    }
    is_rgw=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(yat[i][j]=='R'){
                if(dik[i][j]!='0'){
                    is_rgw++;
                }
                if(dik[i][j+1]!='0'){
                    is_rgw++;
                }
                if(dik[i][j+2]!='0'){
                    is_rgw++;
                }
                if(is_rgw==3){
                    rgw--;
                    yat[i][j]=='0';
                    yat[i][j+1]=='0';
                    yat[i][j+2]=='0';
                    //cout<<"aaaaaaa"<<endl;
                    continue;
                }
                if(is_rgw==2){
                    if(dik[i][j+1]!='0'){
                        rgw--;
                        yat[i][j]=='0';
                        yat[i][j+1]=='0';
                        yat[i][j+2]=='0';
                        //cout<<"aaaaaaa"<<endl;
                        continue;
                    }
                    else{
                        if(yat[i-1][j+2]!='0'){
                            rgw-=2;
                            dik[i][j+2]=='0';
                            dik[i-1][j+2]=='0';
                            dik[i-2][j+2]=='0';
                            dik[i][j]=='0';
                            dik[i+1][j]=='0';
                            dik[i+2][j]=='0';
                            //cout<<"aaaaaaa"<<endl;
                            continue;
                        }
                        else{
                            rgw--;
                            yat[i][j]=='0';
                            yat[i][j+1]=='0';
                            yat[i][j+2]=='0';
                            //cout<<"aaaaaaa"<<endl;
                            continue;
                        }
                    }
                }
                if(is_rgw==1){
                    rgw--;
                    if(dik[i][j]!='0'){
                        dik[i][j]=='0';
                        dik[i-1][j]=='0';
                        dik[i-2][j]=='0';
                    }
                    else if(dik[i][j+1]!=0){
                        dik[i][j+1]=='0';
                        dik[i-1][j+1]=='0';
                        dik[i+1][j+1]=='0';
                    }
                    else{
                        dik[i][j+2]=='0';
                        dik[i+1][j+2]=='0';
                        dik[i+2][j+2]=='0';
                    }
                    //cout<<"aaaaaaa"<<endl;
                    continue;
                }
                
            }
        }
    }
    cout<<rgw;
}

signed main(){
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    
    int t=1;
    //cin>>t;
    while(t--){
        solve();
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...