CodeForces
来源:互联网 发布:如何寻找淘宝客 编辑:程序博客网 时间:2024/06/13 22:37
题意:给定一个长度为n的a数组,(2=<n<=1e5,0=<ai<=1e4),和一个数字k,程序要求输出满足下标对(I<j),ai与aj(二进制)有k位不同,的对数
思路:预处理用一个数组记录数字I有几位为1,ai与aj有几位不同可以通过num[I^j]确定,1e4的二进制有14位,则I^j的做为14位1,num至少得开16383+1.
#include<cstdio>#include<cstring>using namespace std;int num[16384];long long vis[10001];void init(){memset(num,0,sizeof(num));for(int i=1;i<16384;i++){int cc=i;while(cc){num[i]+= (cc%2);cc/=2;}}}int main(){//freopen("in.txt","r",stdin);int n,k,a;init();while(scanf("%d%d",&n,&k)!=EOF){long long ans=0;memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){scanf("%d",&a);vis[a]++;}for(int i=0;i<10001;i++){if(vis[i]==0)continue;for(int j=i;j<10001;j++){if(vis[j]>0&&num[i^j]==k)//如果i和j存在于a数组 { //如果i==j,则任意两个可以“匹配” c(2,n)if(i==j)ans+= ((vis[i])*(vis[i]-1))/2;//i!=j 则i只能与j“配对”数量也即vis[i]*vis[j] else ans+=(vis[i]*vis[j]);}}}printf("%I64d\n",ans);}}
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- LeetCode 450.Delete Node in a BST
- Success Rate CodeForces
- INI文件操作
- apue第八章 进程控制 (1)
- Ubuntu16.04下面安装ExtCalc计算器
- CodeForces
- Mybatis拦截器介绍及分页插件
- poj 2155 Matrix
- LeetCode | 575. Distribute Candies
- 总结
- [cv]edge detection: 2d operators
- 继承关系映射--joined-subclass 元素映射继承关系
- ai-2766-最大子矩阵-C语言-动态规划
- Linux设备驱动工程师之路——网络设备驱动基本原理和框架