专栏文章

题解:AT_abc417_c Distance Indicators

AT_abc417_c题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miok2gih
此快照首次捕获于
2025/12/02 20:29
3 个月前
此快照最后确认于
2025/12/02 20:29
3 个月前
查看原文
观察式子:ji=Ai+Ajj - i = A_i + A_j,移项可得:i+Ai=jAji + A_i = j - A_j,发现此时等式左边只与 ii 有关,右边只与 jj 有关。
考虑枚举 ii,每次将答案加上满足 i+Ai=jAji + A_i = j - A_jjj 的数量。
那么我们就需要先开一个 map,记为 cnt,在输入的时候对于每一个元素,进行 cnt[i - a[i]]++ 的操作。然后在枚举到每一个 ii 的时候,进行 ans += cnt[i + a[i]] 统计答案。
题目说了 i<ji < j,我们这样统计会不会统计进 i=ji = j 的情况?其实不会,题目保证了 Ai0A_i \not = 0,因此不会有 i+Ai=iAii + A_i = i - A_i 的情况。
CPP
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const int N = 2e5 + 5;
int n, a[N];
map <int, int> cnt;

int main(){
	
	ios :: sync_with_stdio(false);
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i], cnt[i - a[i]]++;
	ll ans = 0;
	for(int i = 1; i <= n; i++)
		ans += cnt[i + a[i]];
	cout << ans;
	
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...