学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
你是王国的优秀特工,国家派你取阻止一个情报交易,间谍将要在一个宴会上进行交易,你已经潜入了会场。
宴会有n名参加者,编号为1~n,第i名的身高是
a
i
a_i
ai。已经要进行交易的是满足以下条件的两个人:
两人的编号之差的绝对值,等于两个人身高之和
从n个人中找出2个人的方法有n(n-1)/2种,你要找出其中有多少种组合满足条件。
【输入】
第1行,1个正整数n
第2行,n个正整数
a
1
,
a
2
,
…
,
a
n
a_1,a_2,\dots,a_n
a1,a2,…,an
【输出】
输出满足条件的二人组个数。
【输入样例】
6
2 3 3 1 3 1
【输出样例】
3
【代码详解】
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 200005;
int n, a[N];
LL ans;
map<int, int> cnt; // 记录i-a[i]对应的j+a[j]
int main()
{
cin >> n;
for (int i=1; i<=n; i++) cin >> a[i]; // 输入n个人的身高
for (int i=1; i<=n; i++) { // 遍历n个人
ans += cnt[i-a[i]]; // 计算答案
++cnt[i+a[i]]; // 现在的i贡献给将来的j
}
cout << ans << endl;
return 0;
}
【运行结果】
6
2 3 3 1 3 1
3