题目大意:给定一个序列a[1],a[2],…,a[n]。求满足i!=j且a[i]|a[j]的二元组(i,j)的个数
题解:类似1607,暴力筛
调和级数复杂度
看上去不科学(实际也不科学),但是由于Bzoj算总时间就可以过了
我的收获:23333
#include <cstdio>
#include <iostream>
using namespace std;
#define N 2000010
int n,x,m;
long long ans,a[N];
void work()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&x),a[x]++,m=max(m,x);
for(int i=1;i<=m;i++){
ans+=(a[i]-1)*(a[i]);
for(int j=i+i;j<=m;j+=i) ans+=a[j]*a[i];
}
printf("%lld\n",ans);
}
int main()
{
work();
return 0;
}