ZOJ—3870 (位运算)
来源:互联网 发布:大数据时代是什么意思 编辑:程序博客网 时间:2024/06/08 13:24
比赛时没想到,位运算的话还是要转化成二进制来寻找规律啊。。。。
题意很简单:给出一串数字,如果x和y的x^y>max(x,y)的话就是满足条件的一组,求一共有多少组。
/*对于一个数,如果我们把x的二进制表示中最高位的0变成1,0前面的都不变,那么得到的这个新值肯定比x大。即:如果x的第i位为1(i为x的最高位的1所在位置),y的第i位为0(i不是y的最高位所在位置),那么z=x^y之后,z > max(x, y)。*/#include <iostream>#include <cstdio>#include <cstring>#include <string.h>using namespace std;const int maxn = 100000+5;int b[maxn];//b[i]代表最高位位于l的元素的个数int s[maxn];int t;int n;void Init(int x){ int l=31; while(l>=0)//从高到低查找 { if(x & (1<<l)) { b[l]++; return ; } l--; }}int main(){ scanf("%d",&t); while(t--) { memset(b,0,sizeof(b)); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&s[i]); Init(s[i]); } int ans=0; for(int i=0;i<n;i++) { int l=31; while(l>=0)//找当前的s[i]的最高位位于何处 { if(s[i]& (1<<l)) break; l--; } while(l>=0)//从最高位向下查找满足的,如果当前位满足就ans就加上它 { if(!(s[i]&(1<<l))) { ans+=b[l]; } l--; } } cout << ans <<endl; } return 0;}
0 0
- ZOJ—3870 (位运算)
- ZOJ 3870 Team Formation(位运算)
- ZOJ 3870Team Formation(位运算)
- ZOJ - 3870 Team Formation (位运算)
- ZOJ-3870 Team Formation(位运算)
- zoj 3870 Team Formation(位运算,超时)
- ZOJ 题目3870 Team Formation(数学,位运算)
- zoj--3870--Team Formation(位运算好题)
- ZOJ 3870 Team Formation 位运算
- zoj 3870 Team Formation 位运算
- ZOJ Team Formation 3870【位运算】
- zoj 3432 字符串 位运算
- ZOJ-3870-Team Formation【位运算】【12th浙江省赛】
- ZOJ 3675 Trim the Nails(bfs+位运算处理)
- zoj 3432 神奇的位运算。。
- zoj 2297【DP+位运算状态压缩】
- zoj 1967 Fiber Network(位运算&&FLOYD)
- ZOJ 3591 Nim 前缀和+位运算
- 动态页面抓取
- uva 378 Intersecting Lines
- Uva1593 Alignment of Code
- Mac 升级bash
- Linux memcache操作命令
- ZOJ—3870 (位运算)
- 解释VR的时间扭曲(time-warp)
- 基于Tensorflow的MNIST手写数字识别(一)
- 【Usaco DEC08 bronze】劣质的草
- Android系统联系人特效
- 前端框架Vue(5)——Vue+Echarts
- 并发编程(Synchronized/volatile/atomic)
- PTA 5-37 整数分解为若干项之和
- 微信授权、登录、注册逻辑