思路:计数题
注意到
A
i
≤
1
0
6
A_i \le 10^{6}
Ai≤106,因此可以考虑用一个桶
a
[
i
]
a[i]
a[i]来存储数据
a
n
s
=
∑
i
=
1
m
a
x
a
i
∑
j
=
i
+
1
m
a
x
a
i
+
1
a
[
i
]
∗
a
[
k
]
∗
(
[
k
=
=
j
∗
j
−
i
∗
i
]
∗
[
k
<
m
]
)
ans=\sum_{i=1}^{maxa_i} \sum_{j=i+1}^{maxa_i+1} a[i]*a[k]*([k==j*j-i*i]*[k<m])
ans=∑i=1maxai∑j=i+1maxai+1a[i]∗a[k]∗([k==j∗j−i∗i]∗[k<m])
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl '\n';
typedef long long ll;
typedef pair<int,int> PII;
const int N=1e6+10,mod=1e9+7;
int n,a[N];
int main(){
IOS;
cin>>n;
int m=0;
for(int i=1;i<=n;i++){
int t;cin>>t;
a[t]++;
m=max(m,t);
}
ll ans=0;
for(int i=1;i<=m;i++){
for(int j=i+1;j<=m+1;j++){
ll k=1LL*j*j-1LL*i*i;
if(k>m) break;
ans+=1LL*a[i]*a[k];
}
}
cout<<ans<<endl;
return 0;
}