Codeforces Round #112 (Div. 2) E题 位运算
来源:互联网 发布:软件配置管理实施情况 编辑:程序博客网 时间:2024/06/01 09:52
大意就是给出一个序列,对每个元素,看序列中是否存在另一个元素跟他按位与的值为0,然后输出这个元素
数列的长度很大,所以n2肯定挂掉。当时想到了对每个数,可能有400多万种情况,但是却没想到去预处理。
正解就是预处理了,对于一个二进制数,如果数位中的一些1变成0后,能够变成序列中的某个数,那么就将这个二进制数指向那个数。
然后对某个元素,要找能使跟他按位与为0的元素,只要满足能把这个元素的二进制位中的1都干掉就行,就是说这个元素二进制位是1的地方,要求的数相应的位置就必须是0,然后其他地方就无所谓了。那么最大的能满足要求的数便是该数与((1 << 22) -1 )异或所得的数了,然后这个数二进制位中的1随意改变成0后的数也都满足要求。
然后事先我们也预处理过了,直接输出就行了。
/*ID: sdj22251PROG: subsetLANG: C++*/#include <iostream>#include <vector>#include <list>#include <map>#include <set>#include <deque>#include <queue>#include <stack>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include <sstream>#include <iomanip>#include <cstdio>#include <cstdlib>#include <cctype>#include <string>#include <cstring>#include <cmath>#include <ctime>#define INF 1000000009#define MAXN 210005#define eps 1e-10#define L(x) x<<1#define R(x) x<<1|1using namespace std;int a[1000005];int tag[4500005];int main(){ int n; scanf("%d", &n); for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); tag[a[i]] = a[i]; } int fk = (1 << 22) - 1; for(int i = 1; i <= fk; i++) { for(int j = 0; j < 22; j++) if((i & (1 << j)) && tag[i ^ (1 << j)]) tag[i] = tag[i ^ (1 << j)]; } for(int i = 1; i <= n; i++) { if(tag[a[i] ^ fk]) printf("%d", tag[a[i] ^ fk]); else printf("-1"); if(i < n) putchar(' ');else printf("\n"); } return 0;}
- Codeforces Round #112 (Div. 2) E题 位运算
- Codeforces Round #396 (Div. 2)E(树形dp,按位运算,好题)
- Codeforces Round #195 (Div. 2)位运算
- Codeforces Round #238 (Div. 2)(位运算)
- Codeforces Round #103 (Div. 2) E题
- Codeforces Round #277 (Div. 2)E题
- Codeforces Round #277.5 (Div. 2)E题
- Codeforces Round #306 (Div. 2) B.Preparing Olympiad (位运算)
- Codeforces Round #344 (Div. 2) A. Interview (位运算)
- Codeforces Round #443 (Div. 2) A、B、C 位运算
- Codeforces 405E Codeforces Round #238 (Div. 2)E
- Codeforces Beta Round #63 (Div. 2) E题
- Codeforces Beta Round #69 (Div. 2 Only) E题
- Codeforces Round #340 (Div. 2) E题 莫队算法
- Codeforces Round #429 (Div. 2) D E两题总结
- Codeforces Round #431 (Div. 2)(有E题!)比赛总结
- (贪心, 字符串, 位运算)Codeforces Round #402 E. Bitwise Formula
- Codeforces Round #147 (Div. 2) E
- 开发属于自己的在线编辑器--编辑器的核心
- 浙江大学2011年复试上机题 解题报告
- 2012年3月17日
- 专注于操作系统22之中断
- vc游戏--01--windows API程序框架
- Codeforces Round #112 (Div. 2) E题 位运算
- RadioWar_RFID_LiveCD_Alpha315.iso
- Python模拟Web Fetion给好友发送信息
- asp.net 页面缓存
- 发个XNA中文字体生成的辅助小工具
- STL::bind1st STL::bind2st boost::bind
- Android Prelink实现的源码分析
- 计算机组成原理学习心得(二)
- atoi, itoa 字符串转换函数源代码