连连看
题号:NC309558
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

小蓝正在和朋友们玩一种新的连连看游戏。在一个 n \times m 的矩形网格中,每个格子中都有一个整数,第 i 行第 j 列的整数为 A_{i,j}

玩家需要在这个网格中寻找一对格子 (a, b)(c, d),使得这两个格子中的整数 A_{a,b}A_{c,d} 相等,且它们的位置满足 |a - c| = |b - d| > 0

请问在这个 n \times m 的矩形网格中一共有多少对这样的格子满足条件?

输入描述:

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

接下来是 n 行,第 i 行包含 m 个正整数 A_{i,1}, A_{i,2}, \dots, A_{i,m},相邻整数之间用一个空格分隔。

输出描述:

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

输入

复制
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 \le n, m \le 50
- 对于所有评测用例,1 \le n, m \le 1000, 1 \le A_{i,j} \le 1000