HDU2017新生赛 友好整数

思路:

很简单的一个状态压缩,比赛时没想出来。

最多只有2^10个状态,n^2暴力一下也就1e6。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a)) const int N=1e6+;
int cnt[];
ll a[N];
void f(ll n)
{
int t=;
while(n)
{
t|=(<<(n%));
n/=;
}
cnt[t]++;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie();
int n;
while(cin>>n)
{
for(int i=;i<n;i++)cin>>a[i];
mem(cnt,);
for(int i=;i<n;i++)f(a[i]);
ll ans=;
for(int i=;i<;i++)
{
for(int j=i;j<;j++)
{
if(i==j)ans+=(ll)cnt[i]*(cnt[i]-)/;
else if(i&j)
{
ans+=(ll)cnt[i]*cnt[j];
}
}
}
cout<<ans<<endl;
}
return ;
}
上一篇:Centos7 Mysql5.7主从服务器配置


下一篇:SCNU ACM 2016新生赛初赛 解题报告