ZOJ 3870 Team Formation(二进制找规律)
2016-04-13 10:00
821 查看
Description
For an upcoming programming contest, Edward, the headmaster of Marjar University, is forming a two-man team from N students of his university.
Edward knows the skill level of each student. He has found that if two students with skill level A and B form a team, the skill level of the team will be A ⊕ B, where ⊕ means bitwise exclusive or. A team will play
well if and only if the skill level of the team is greater than the skill level of each team member (i.e. A ⊕ B > max{A, B}).
Edward wants to form a team that will play well in the contest. Please tell him the possible number of such teams. Two teams are considered different if there is at least one different team member.
Input
There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:
The first line contains an integer N (2 <= N <= 100000), which indicates the number of student. The next line contains N positive integers separated by spaces. The ith integer denotes the skill level
of ith student. Every integer will not exceed 109.
Output
For each case, print the answer in one line.
Sample Input
Sample Output
For an upcoming programming contest, Edward, the headmaster of Marjar University, is forming a two-man team from N students of his university.
Edward knows the skill level of each student. He has found that if two students with skill level A and B form a team, the skill level of the team will be A ⊕ B, where ⊕ means bitwise exclusive or. A team will play
well if and only if the skill level of the team is greater than the skill level of each team member (i.e. A ⊕ B > max{A, B}).
Edward wants to form a team that will play well in the contest. Please tell him the possible number of such teams. Two teams are considered different if there is at least one different team member.
Input
There are multiple test cases. The first line of input contains an integer T indicating the number of test cases. For each test case:
The first line contains an integer N (2 <= N <= 100000), which indicates the number of student. The next line contains N positive integers separated by spaces. The ith integer denotes the skill level
of ith student. Every integer will not exceed 109.
Output
For each case, print the answer in one line.
Sample Input
2 3 1 2 3 5 1 2 3 4 5
Sample Output
1 6
#include <bits/stdc++.h> #define N 100000 #define LL long long #define U unsigned using namespace std; int cas=1,T; int n,a[N+10],bit[32],hb[32],b[32]; int main() { //freopen("1.in","w",stdout); //freopen("1.in","r",stdin); //freopen("1.out","w",stdout); for(int i=0;i<32;i++) bit[i]=1<<i; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",a+i); sort(a,a+n); memset(hb,0,sizeof(hb)); memset(b,0,sizeof(b)); LL ans=0; for(int i=n-1;i>=0;i--) { int hib=-1; for(int j=30;j>=0;j--) { if(a[i]>=bit[j]) { if(hib==-1) { //printf("%d\n",b[j]); ans+=b[j]; hib=j; hb[j]++; } if(!(a[i]&bit[j])) { b[j]++; } } } //printf("%d\n",ans); } printf("%lld\n",ans); } //printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC); return 0; }
相关文章推荐
- ListView定焦&滑动效果
- 递归树形菜单
- QT安装过程中报错无法定位程序输入点except1 于动态链接库MSVCR120D dll上
- windows 7 下,如何统计某文件夹下 视频总时长
- 开发人员必备的几款bug管理工具
- 第二章 Spring MVC入门 —— 跟开涛学SpringMVC
- WCF、WebAPI、WCFREST、WebService之间的区别
- Mysql_install_db相关介绍
- 打印1到最大的n位数
- js中Event-事件详解
- tableviews动画块
- Mysql5.5修改字符集
- for while (list each)的用法
- 建造者模式
- UIUC同学Jia-Bin Huang收集的计算机视觉代码合集
- ZOJ 3869 Ace of Aces
- 解析地址栏中的查询字符串参数,返回对象
- MySQL 入门(九)—— 查询数据
- oracle数值函数
- 架构设计-网关服务器