专栏文章

题解:AT_abc417_c [ABC417C] Distance Indicators

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@miojzzuz
此快照首次捕获于
2025/12/02 20:27
3 个月前
此快照最后确认于
2025/12/02 20:27
3 个月前
查看原文
C 题什么时候那么水了...

思路

首先,题目要我们求满足以下两个条件的数对。
1i<jn1 \le i < j \le n ji=aj+aij - i = a_j + a_i
我们把第二个式子转化一下:
jaj=i+aij - a_j = i + a_i
那么,题目就变成了:有多少个 i,ji,j 满足 jaj=i+aij - a_j = i + a_i
注意,这里的 i,ji,j 是不分先后顺序的。
为什么呢,因为,我们假设有一组 x,yx,y 满足 xax=y+ayx - a_x = y + a_y ,那么,不可能 yay=x+axy - a_y = x + a_x 是合法的。
所以,题目的第一个条件不用考虑,所以,先求出所有 iaii - a_i 的数量,在加上所有 i+aii + a_i 的个数。
剩下的就是注意爆 int
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
unordered_map<int,int> mp;
int n,a[200010],ans;
signed main(){
	cin >> n;
	for (int i = 1;i <= n;i++) scanf("%lld",&a[i]),mp[i - a[i]]++;
	for (int i = 1;i <= n;i++) ans += mp[i + a[i]];
	cout << ans << endl;
}

评论

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

正在加载评论...