3号点是100000个1 100000个2
但是我的代码会错 已开long long 求大佬帮助
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
const int P=1e4+7;
struct num
{
int key;
int sum;
};
int n,c,c1,x;
long long ans;
vector<num> hash_table[P];
long long Check(int k)
{
int a=k+c1,b=k;
if(a>=P) a-=P;
int size_a=hash_table[a].size();
int size_b=hash_table[b].size();
if(size_a==0||size_b==0) return 0;
long long res=0;
for(int i=0;i<size_a;i++)
{
for(int j=0;j<size_b;j++)
{
if(hash_table[a][i].key-hash_table[b][j].key==c) res+=hash_table[a][i].sum*hash_table[b][j].sum;
}
}
return res;
}
bool Find(int k)
{
int p=k%P;
int size=hash_table[p].size();
for(int i=0;i<size;i++)
{
if(hash_table[p][i].key==k)
{
hash_table[p][i].sum++;
return 1;
}
}
return 0;
}
int main()
{
ios::sync_with_stdio(false);
cin >> n >> c;
c1=c%P;
for(int i=1;i<=n;i++)
{
cin >> x;
if(!Find(x))
{
num k;
k.key=x;
k.sum=1;
hash_table[x%P].push_back(k);
}
}
for(int i=0;i<P;i++) ans+=Check(i);
cout << ans;
return 0;
}