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

· · 题解

来水一发题解。

既然是 Python 组的,就拿 Python 写吧。

题目分析

给定一个 n \times m 的矩阵,问你有多少对点在同一对角线上,满足两点值相同。

用八皇后的思路,正斜线(/ 型)上的两点横坐标与竖坐标和相同,反斜线(\ 型)上的两点横坐标与竖坐标差相同。

所以我们可以建立 2dict,一个存横坐标与竖坐标和与值,另外一个存横坐标与竖坐标差与值。遍历每个元素并累加值,最后别忘了乘以 2

其中,还要注意一些 Python 的小细节(比如写 main 函数等等),不然很容易 TLE。

Talk is cheap,show me the code!

# By ChenXiJie2013(luogu uid:928418)
def main():
    a = []
    n, m = map(int, input().split())
    zheng, fan = dict(), dict()
    getz, getf = zheng.get, fan.get
    ans = 0
    for i in range(n):
        a.append(tuple(map(int, input().split()))) # 注意map强转成tuple
    for i in range (n):
        for j in range(m):
            ans += getz((i + j, a[i][j]), 0)
            zheng[(i + j, a[i][j])] = getz((i + j, a[i][j]), 0) + 1
            ans += getf((i - j, a[i][j]), 0)
            fan[(i - j, a[i][j])] = getf((i - j, a[i][j]), 0) + 1
    print(ans * 2)
if __name__ == "__main__":
    main()

非常惊险的记录

注:本蒟蒻第一次写题解,若有不足请及时指出。