题解:P11001 [蓝桥杯 2024 省 Python B] 连连看
MLE_Automaton · · 题解
来水一发题解。
既然是 Python 组的,就拿 Python 写吧。
题目分析
给定一个
用八皇后的思路,正斜线(/ 型)上的两点横坐标与竖坐标和相同,反斜线(\ 型)上的两点横坐标与竖坐标差相同。
所以我们可以建立 dict,一个存横坐标与竖坐标和与值,另外一个存横坐标与竖坐标差与值。遍历每个元素并累加值,最后别忘了乘以
其中,还要注意一些 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()
非常惊险的记录
注:本蒟蒻第一次写题解,若有不足请及时指出。