首页 > 试题广场 >

谐距下标对

[编程题]谐距下标对
  • 热度指数:6040 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一个长度为 n 的整数数组 \{a_1,a_2,\dots,a_n\}。若下标满足 i<ja_j-a_i = j-i,则称 (i,j) 为一对谐距下标对

\hspace{15pt}请计算数组中的谐距下标对数量。

输入描述:
\hspace{15pt}第一行输入整数 n\left(1\leqq n\leqq 10^5\right)
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n\left(1\leqq a_i\leqq 10^5\right)


输出描述:
\hspace{15pt}输出一个整数,表示谐距下标对数量。
示例1

输入

6
1 2 3 4 5 6

输出

15
头像 BraveCoder
发表于 2025-08-31 17:36:37
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in. 展开全文
头像 满加
发表于 2025-08-21 14:06:01
C++ 一方面暴力枚举易超时,另一方面计算下标对要用 (unsigned) long long 才够用 #include <iostream> #include <map> #include <vector> using namespace std; int m 展开全文
头像 Silencer76
发表于 2025-08-09 04:31:24
题目链接 谐距下标对 题目描述 给定一个长度为 的整数数组 。若下标对 满足 且 ,则称其为一对“谐距下标对”。 请计算数组中谐距下标对的总数量。 解题思路 本题要求我们寻找所有满足特定条件的下标对。直接使用两层循环的暴力解法时间复杂度为 ,会因超时而无法通过。我们需要找到一个更高效的数学解法 展开全文
头像 牛客989263876号
发表于 2025-06-24 19:17:27
# n=int(input()) # print(n) # number_list=[0] # for i in list(map(int,input().split())): # number_list.append(i) # # print(number_list) # result=0 展开全文
头像 lahm66
发表于 2025-09-12 20:13:59
将条件转化转化为ai-i=aj-j使用HashMap存储相同的,然后组合。参考:https://blog.nowcoder.net/n/8d233209d79f4a6297725d9f6f1c91d2 import java.util.Scanner; import java.util.Map; 展开全文
头像 丨阿伟丨
发表于 2025-08-27 17:14:54
题目链接 谐距下标对 题目描述 给定一个长度为 的整数数组 。若下标对 满足 且 ,则称 为一对谐距下标对。请计算数组中的谐距下标对数量。 解题思路 这是一个计数问题,直接使用暴力法(双重循环)检查所有下标对 的时间复杂度为 ,在 较大时会超时。我们需要寻找一种更高效的解法。 核心思想: 展开全文
头像 Kato_Shoko
发表于 2025-08-04 14:16:11
#include <bits/stdc++.h> #define il inline using namespace std; using ll = long long; using ull = unsigned long long; using int128=__int128_t; 展开全文
头像 Incklaw
发表于 2025-11-12 17:42:43
import sys n=int(input()) aaa=list(map(int,(input().split()))) xiabiao=[] xiabiao=list(map(int,range(0,n))) sub=[] for i in range(0,n): sub.ap 展开全文
头像 徐尚Alan
发表于 2025-09-02 15:17:30
#include <iostream> #include <unordered_map> #include <vector> using namespace std; int main() { int n; cin >> n; 展开全文
头像 E.Y.
发表于 2025-12-12 16:55:46
from collections import Counter n = int(input()) a = list(map(int, input().split())) c = [] for i in range(len(a)): c.append(a[i] - i) #print( 展开全文