题解:P9939 [USACO21OPEN] Acowdemia III B

· · 题解

奶牛交友

思路整理:

题目给出了两头奶牛之间交友的条件,我们分两类讨论:

  1. 若两头奶牛在同一条直线上,且只间隔着一块草地,则它们可以见面。

  2. 若两头奶牛及一块草地呈现拐角状(如下图),也能够见面。

对于能见面的奶牛的搭配要求:

通过以上的详细分析,写代码分分钟的事。

AC CODE:

#include<bits/stdc++.h>
using namespace std;
long long n,m,ans;
char a[1005][1005];
int main(){
    //可自行添加快读等。
    cin>>n>>m;
    for(int i=1;i<=n;i++){//以字符的形式读入。
        for(int j=1;j<=m;j++)cin>>a[i][j];
    }for(int i=1;i<=n;i++){//情况一。
        for(int j=1;j<=m;j++){
            if(a[i][j]=='G'){
                if(a[i-1][j]=='C' && a[i+1][j]=='C')a[i][j]='.',ans++;
                else if(a[i][j-1]=='C' && a[i][j+1]=='C')a[i][j]='.',ans++;
            }
        }
    }for(int i=1;i<=n;i++){//情况二。
        for(int j=1;j<=m;j++){
            if(a[i][j]=='C' && a[i+1][j-1]=='C'){
                if(a[i][j-1]=='G')a[i][j-1]='.',ans++;
                else if(a[i+1][j]=='G')a[i+1][j]='.',ans++;
            }if(a[i][j]=='C' && a[i+1][j+1]=='C'){//与上面的情况不排斥,不能加else。
                if(a[i][j+1]=='G')a[i][j+1]='.',ans++;
                else if(a[i+1][j]=='G')a[i+1][j]='.',ans++;
            }
        }
    }
    cout<<ans;//输出组成朋友的最大数量。
    return 0;//好习惯。
}