蓝桥杯-Python组(py的哈希表)

连连看

传送门:0连连看 - 蓝桥云课

问题描述

小蓝正在和朋友们玩一种新的连连看游戏。在一个 n×m的矩形网格中,每个格子中都有一个整数,第 i 行第 j 列上的整数为 Ai,j​ 。玩家需要在这个网格中寻找一对格子(a,b)−(c,d) 使得这两个格子中的整数 Aa,b​ 和 Ac,d 相等,且它们的位置满足 ∣a−c∣=∣b−d∣>0。请问在这个 n×m 的矩形网格中有多少对这样的格子满足条件。

输入格式

输入的第一行包含两个正整数 n,m,用一个空格分隔。

接下来 n 行,第 i 行包含 m 个正整数 Ai,1,Ai,2,⋯,Ai,m相邻整数之间使用一个空格分隔。

输出格式

输出一行包含一个整数表示答案。

样例输入

复制代码
3 2
1 2
2 3
3 2

样例输出

复制代码
6

样例说明

一共有以下 6 对格子:(1,2)−(2,1),(2,2)−(3,1),(2,1)−(3,2),(2,1)−(1,2),(3,1)−(2,2),(3,2)−(2,1)。

评测用例规模与约定

对于 20% 的评测用例,1≤n,m≤50;

对于所有评测用例,1≤n,m≤1000,1≤Ai,j≤1000

思路

想法很容易想,随便在纸上画画就可以知道这道题的意思是:对于(i, j)这个点去找跟他在一个对角线的元素,如果相等就可以连,就是要注意一下(1, 2)连(2, 1)之后(2, 1)也会连(1, 2)也就是最后的 ans 要乘2

在写代码前,介绍一下Python的哈希表

py的哈希表

defaultdictCounter 都是 Python 中用于简化字典操作的类,可以看作是某种形式的哈希表。

  • defaultdict

    • defaultdict 是 Python 标准库 collections 模块中的一个类,它是一个字典(哈希表)的子类。与普通字典不同的是,defaultdict 会为每个不存在的键提供一个默认值,避免了访问不存在的键时引发 KeyError
    • 在你的代码中,right = defaultdict(Counter) 意味着当你访问一个不存在的键时,它会自动创建一个 Counter 对象作为这个键的值。这非常方便,因为你可以直接使用 Counter 的方法来统计出现的次数。
  • Counter

    • Counter 也是 collections 模块中的一个类,它是一个特殊的字典,用于计数可哈希对象的数量。Counter 会将对象作为键,将其出现的次数作为值。
    • 在这段代码中,rightleft 都是以对角线的哈希值(i + jj - i)作为键,而值是 Counter,它会存储在这些对角线上的元素及其出现次数。
  • defaultdict(Counter)是创建了一个二维哈希表

  • 如果你不使用 Counter 而是直接使用 defaultdict,那么它将是一个一维的哈希表。在这种情况下,你可以将 defaultdict 用于存储每个键对应的值,通常是整数或其他类型的数据。

代码:

python 复制代码
from collections import *

n, m = map(int,input().split())
g = []
for _ in range(n):
  g.append(list(map(int,input().split())))
# print(g)

l = defaultdict(Counter)
r = defaultdict(Counter)

ans = 0
for i in range(n):
  for j in range(m):
    x = g[i][j]
    ans += r[i + j][x] + l[i - j][x]
    r[i + j][x] += 1
    l[i - j][x] += 1
print(ans * 2)
相关推荐
闻缺陷则喜何志丹17 小时前
【计算几何 二分查找】P12261 [蓝桥杯 2024 国 Java B] 激光炮|普及+
c++·数学·蓝桥杯·计算几何·洛谷
南山乐只18 小时前
【原文翻译搬运】Equipping agents for the real world with Agent Skills
人工智能·职场和发展·创业创新
月明长歌18 小时前
【码道初阶】Leetcode.189 轮转数组:不熟悉ArrayList时踩得坑,被Arraylist初始化骗了?
java·算法·leetcode·职场和发展
fantasy_arch18 小时前
leetcode算法-最大乘积子数组
算法·leetcode·职场和发展
玩具猴_wjh18 小时前
慧科讯业面试复盘
面试·职场和发展
_OP_CHEN18 小时前
【算法基础篇】(三十一)动态规划之基础背包问题:从 01背包到完全背包,带你吃透背包问题的核心逻辑
算法·蓝桥杯·动态规划·背包问题·01背包·完全背包·acm/icpc
闻缺陷则喜何志丹19 小时前
【计算几何】P12144 [蓝桥杯 2025 省 A] 地雷阵|普及+
c++·数学·蓝桥杯·计算几何
努力学算法的蒟蒻1 天前
day31(12.11)——leetcode面试经典150
面试·职场和发展
迈巴赫车主1 天前
蓝桥杯 20531黑客java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
leoufung1 天前
LeetCode 427:Construct Quad Tree 题解与两种思路对比
算法·leetcode·职场和发展