题解:P11001 [蓝桥杯 2024 省 Python B] 连连看
题目传送门
思路讲解
仔细读题,不难发现。如果
而要使
所以,我们可以使用两个 map 来统计两个对角线上的数值的个数,在输入时,先将答案加上除该点以外的前面的在该点两条对角线上与它相等的点的个数,再将该点加入到两个 map 中。
最后将答案乘
代码实现
#include <bits/stdc++.h>
using namespace std;
map <pair<int,int>,int> mp1,mp2;
int main(){
int n,m,ans=0;
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
int a;
cin>>a;
ans+=mp1[make_pair(a,i-j)]++,ans+=mp2[make_pair(a,i+j)]++;//先加答案,再加map
}
cout<<ans*2;//乘2输出
return 0;
}
完结撒花!