DoubleSum(牛客)


突破点和关键点就在于那个c的k次方,为啥是c的k次方,肯定是有奇效的

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=1e5+5;
ll a[maxn],ans;
ll fast_mi(ll a,ll b){
	ll sum=1;
	while(b){
		if(b&1)sum*=a;
		a*=a;
		b>>=1;
	}
	return sum;
}
int main(){
int n,c,x;
cin>>n>>c;
int up=1;while(fast_mi(c,up)<=1e9)up++;
for(int i=1;i<=n;i++)cin>>a[i];
    for(int k=up;k>=1;k--){
    	ll mod=fast_mi(c,k);
    	map<ll,int>mp;
		for(int i=1;i<=n;i++){
    	mp[a[i]%mod]++;
    	if(mp[a[i]%mod]>=2){
    		//cout<<"mod="<<mod<<endl;
		ans+=(mp[a[i]%mod]-1);
		}
		}
	}
	cout<<ans*2<<endl;
     return 0;
}
posted @ 2022-01-19 21:43  wzx_believer  阅读(51)  评论(0编辑  收藏  举报