ZOJ 3870(数学)
来源:互联网 发布:网站编程软件 编辑:程序博客网 时间:2024/06/15 16:52
//题意:从一堆数字中任选两个数字,使其异或后的值大于这两个数字的任意一个 求这样的数字有多少对//方法: 如果要两个数字异或后的值大于任意一个 // 只需要大的那个元素的最高位大于小的那个元素的最高位且// 小的元素的最高位对应的大的元素的该位上的数字为0即可// 利用数组bits[i](二进制最高位为i的数字有多少个)进行累加即可#include <stdio.h>#include <math.h>#include <string.h>#include <algorithm>#include <iostream>using namespace std;int bits[35];int ss[100005];int cnt[100005];long long ans;void find_(int x){ for(int i = cnt[x]; i>= 0; i--) { if( !((1 << i) & ss[x]) ){ ans += bits[i]; } }}int cal(int x){ int i = 31; while(i >= 0) { if(x & (1 << i)){ bits[i]++; return i; } else i--; }}int main(){ int t, n, temp; scanf("%d", &t); while(t--) { scanf("%d", &n); memset(bits, 0, sizeof bits); for(int i = 0; i < n; i++) { scanf("%d", &ss[i]); cnt[i] = cal(ss[i]); } ans = 0; for(int i = 0; i < n; i++) find_(i); printf("%d\n", ans); } return 0;}
0 0
- ZOJ 3870 数学思维
- ZOJ 3870(数学)
- ZOJ 3870 Team Formation(数学)
- [水+数学] zoj 3870 Team Formation
- ZOJ 3870 - Team Formation(数学)
- zoj 3647 组合数学
- zoj 2952 (数学)
- ZOJ 3768(暴搜+数学)
- ZOJ 3733 Skycity 数学
- ZOJ 3903 数学
- ZOJ 3919Ellipse(数学)
- ZOJ 3499Median(数学)
- ZOJ 3498Javabeans(数学)
- ZOJ -3203 三分+数学
- zoj 1889 ones 数学
- ZOJ 题目3870 Team Formation(数学,位运算)
- ♥ZOJ 3870-Team Formation【异或,数学】
- ZOJ 2330 数学证明,二分
- 显式intent和隐式intent
- Android-使用MultiAutoCompleteTextView进行分隔符动态匹配
- 第4周项目5 n的阶乘
- OC中的内存管理以及协议的详解
- ActiveMQ 介绍(二)之JMS
- ZOJ 3870(数学)
- 关于vxworks工程迁移到另外电脑里,wind river workbench编译报错
- 基于ZooKeeper的一种简单分布式锁的实现
- POJ 2785 4 Values whose Sum is 0 折半枚举
- 第4周项目5 奇数项的累乘
- 50. Pow(x, n)
- 理解矩阵(一)
- Android安全攻防战,反编译与混淆技术完全解析(上)
- JS表单编程