P9302 [CCC 2023 J4/S1] Trianglane 题解

· · 题解

这题很显然,两个相邻的黑色三角形,每个黑色的周长都要减去 1,因此我们可以一个一个遍历。

那么如何判断相邻?很显然,同行邻列上的黑色三角形相邻,并且奇数列上的黑色三角形也相邻。所以我们可以按照这个思路写代码。

Code:

#include<bits/stdc++.h>
using namespace std;
int c,ans=0;
bool k[2][200001]={0};
int main(){
    cin>>c;
    for(int i=0;i<=1;i++){
        for(int j=1;j<=c;j++){
            cin>>k[i][j];
         }
    }
    for(int i=0;i<=1;i++){
        for(int j=1;j<=c;j++){
            if(k[i][j]){
                ans+=3;
                if(j%2&&i-1==0&&k[i-1][j])ans--;//判断相邻行
                if(j%2&&i+1==1&&k[i+1][j])ans--;
                if(j-1>=1&&k[i][j-1])ans--;    //判断相邻列
                if(j+1<=c&&k[i][j+1])ans--;
            }
        }
    }
    cout<<ans;
    return 0;
}