3号点WA求助
查看原帖
3号点WA求助
612567
Kazeno_Akina楼主2023/2/5 20:16

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;
}
2023/2/5 20:16
加载中...