牛客练习赛 23 C 托米的位运算
链接:https://www.nowcoder.com/acm/contest/156/C
来源:牛客网
说话间1317给了托米 n 个自然数 a1... an, 托米可以选出一些带回家,但是他选出的数需要满足一些条件
设托米选出来了k 个数 b1,b2... bk, 设这个数列 b 的给值为 b 中所有数按位与的结果,如果你能找到一个整除 b 的最大的 2v,(v≥ 0), 则设定 v 为这个数列的给价,如果不存在这样的 v,则给价值为 -1, 1317 希望托米在最大化给价的情况下,最大化 k
输入描述:
第一行输入一个整数 n, 第二行输入 a1...an
输出描述:
第一行输出最大的整数 k, 第二行输出 k 个整数 b1... bk, 按原数列的相对顺序输出 (如果行末有额外空格可能会格式错误)
输入
5
1 2 3 4 5
输出
2
4 5
备注:
n≤ 105, a1... an < 2^31 题意:从n个数中挑出k个数,这k个数组成的序列的值为每个数按位与运算,序列值求出最大的能被2^v整除的数
比如10&12=8,所以我们的V是3
比如5&7=5 所以我们的V是0
然后在求出最大的数后要求k的个数也是尽量最大,
思路:因为我们看一个数能被2^v整除,看得还是一个数的最低位是哪个,所以我们取最低位的时候可以使用lowbit,我们又要取最大的那个,那我们就按二进制位1从高到底的去找
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + ;
int a[N], n, b[N], m;
int main() {
ios::sync_with_stdio(false); cin.tie(); cout.tie();
cin >> n;
for(int i = ; i <= n; i++) cin >> a[i];
for(int i = ; i >= ; i--) {//从高到低进行枚举
m = ;
int s = (1ll << ) - ;
for(int j = ; j <= n; j++)//遍历每个数
if(a[j] >> i & ) s &= a[j], b[++m] = a[j];//如果找到包含当前二进制位1的就进行与运算,并且把数存下来
// printf("%d %d\n", i, s);
if((s & -s) == ( << i)) break;//判断最低位是否是我当前枚举的那个1,是的话我们就算找到最大值,然后退出
}
cout << m << endl;
bool first = ;
for(int i = ; i <= m; i++) {
if(first) first = ;
else cout << " ";
cout << b[i];
}
cout << endl;
}
牛客练习赛 23 C 托米的位运算的更多相关文章
- 牛客练习赛23 F 托米的游戏
https://www.nowcoder.com/acm/contest/156/F 树 概率 #include <cstdio> #include <cstdlib> #in ...
- Nowcoder 牛客练习赛23
Preface 终于知道YKH他们为什么那么喜欢打牛客网了原来可以抽衣服 那天晚上有空就也去玩了下,刷了一波水TM的YKH就抽到了,我当然是没有了 题目偏水,好像都是1A的.才打了一个半小时,回家就直 ...
- 牛客练习赛22 C 简单瞎搞题
//位运算 // & 都是1 才是 1 // | 都是0 才是0 // ^ 不一样才是1 #include <iostream> #include <cstdio> # ...
- 牛客练习赛 29 E 位运算?位运算!(线段树)
题目链接 牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...
- 牛客练习赛23-A/B/C/D/F
https://www.nowcoder.com/acm/contest/156#question 链接:https://www.nowcoder.com/acm/contest/156/A来源:牛客 ...
- 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)
牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D
目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...
- 牛客练习赛23CD
链接:https://www.nowcoder.com/acm/contest/156/C 来源:牛客网 题目描述 托米完成了1317的上一个任务,十分高兴,可是考验还没有结束 说话间1317给了托米 ...
随机推荐
- LeetCode--006--Z字型变换(java)
将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T ...
- LeetCode--496--下一个更大元素I(java)
给定两个没有重复元素的数组 nums1和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更大 ...
- BFS+二进制状态压缩 hdu-1429
好久没写搜索题了,就当练手吧. vis[][][1025]第三个维度用来维护不同key持有状态的访问情况. 对于只有钥匙没有对应门的位置,置为'.',避免不必要的状态分支. // // main.cp ...
- 架构探险笔记6-ThreadLocal简介
什么是ThreadLocal? ThreadLocal直译为“线程本地”或“本地线程”,如果真的这么认为,那就错了!其实它就是一个容器,用于存放线程的局部变量,应该叫ThreadLocalVariab ...
- 兼容IE8的video写法
<video width="100%" height="515px" controls preload> <source src=" ...
- Notes for 'Making elephants fly'
1. 技术陷阱:应是需求导向, 而不是技术导向. 2. 时机最重要:而不是创造力,团队,客户,产品,或技术. 3. 模仿:能模仿就模仿,不能模仿就创新.巧匠摹形,大师窃意. good artists ...
- Hibernate 加载策略得总结
Hibernate 加载策略得总结 加载策略(优化查询): 策略种类: 延迟加载: 等到使用的时候才会加载数据. 立即加载: 不管使用不使用,都会立刻将数据加载. 策略的应用: 类级别的加载策略. 关 ...
- 2.Liunx 系统设置
1.基本命令:clear 2.环境变量: alias .export 大纲 系统管理命令 1.用户管理:adduser .passwd. userdel 2.用户组管理:groupadd.groupd ...
- vue 给 图片添加一个默认图片
<img v-bind:src="userData.photo" :onerror="logo" class="img-box4"&g ...
- python-time,datetime
1.time模块:time.time() # 返回当前时间的时间戳(1970纪元后经过的浮点秒数)time.localtime([ sec ]) # 接收时间戳(默认为当前时间),返回struct_t ...