题解:P11001 [蓝桥杯 2024 省 Python B] 连连看

· · 题解

题目分析:

题目说 |a-c| = |b-d| > 0,由此可知只有某点的右上,左上,右下,左下的四个方向才满住条件,但因有重复的,所以可以只算两个相邻的方向,最后再乘 2 , AC 代码如下。

#include <bits/stdc++.h>
using namespace std;
int n,m,jj[1100][1100],ddd=0;
void fff(int a,int b,int c){
    for(int i=1;i<=min(n-a,m-b);i++)//找右下方的
        ddd+=(jj[a+i][b+i]==c);
    for(int i=1;i<=min(n-a,b+1);i++)//找左下方的
        ddd+=(jj[a+i][b-i]==c);
    return ;
}
int main()
{
    ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
    std::ios::sync_with_stdio(false);
    std::cin.tie(NULL);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int y=1;y<=m;y++)
            cin>>jj[i][y]; 
    for(int i=1;i<=n;i++)
        for(int y=1;y<=m;y++)
            fff(i,y,jj[i][y]);
    cout<<(ddd<<1);
    return 0;
}

这是本蒟蒻的第一篇题解,如有错误还请各位大佬告知。