博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces437 B. The Child and Set
阅读量:5339 次
发布时间:2019-06-15

本文共 1731 字,大约阅读时间需要 5 分钟。

题目类型:位运算

传送门:><

题意:给出\(sum和limit\),求一个集合\(S\),其中的元素互不相同且不超过\(limit\),他们的\(lowbit\)之和等于\(sum\)

解题思路

首先我们求出\(limit\)范围内每个数的\(lowbit\),并从大到小排序。要选出一些数使其和等同于\(sum\),根据我们已有的二进制知识,肯定是先选大的,再选小的。

为什么?考虑所有的\(lowbit\)都是2的幂,也就相当于我们将\(sum\)转为二进制以后,每一个1是一个\(lowbit\)。然而由于可能大的不存在,需要由小的\(lowbit\)叠加而产生。我们不知道小的应该叠加几个,然而如果有大的肯定大的直接上就好了,把小的留给别人去叠加。如果大的全部上了小的还不够,那么肯定无法完成

反思

贪心思想。感觉好像贪心的题大多有排序。贪心其实只需要证明自己的这种做法是正确的就好了

Code

/*By DennyQi 2018*/#include 
#include
#include
#include
using namespace std;typedef long long ll;const int MAXN = 10010;const int MAXM = 20010;const int INF = 1061109567;inline int Max(const int a, const int b){ return (a > b) ? a : b; }inline int Min(const int a, const int b){ return (a < b) ? a : b; }inline int read(){ int x = 0; int w = 1; register char c = getchar(); for(; c ^ '-' && (c < '0' || c > '9'); c = getchar()); if(c == '-') w = -1, c = getchar(); for(; c >= '0' && c <= '9'; c = getchar()) x = (x<<3) + (x<<1) + c - '0'; return x * w;}struct Num{ int l_b,val;}a[100010];int sum,limit,tot;int ans[100010],top;inline bool cmp(const Num& a, const Num& b){ if(a.val != b.val) return a.l_b > b.l_b; return a.val < b.val;}int main(){ sum = read(), limit = read(); for(int i = 1; i <= limit; ++i){ a[i].l_b = i & (-i); a[i].val = i; } sort(a+1, a+limit+1, cmp); for(int i = 1; i <= limit; ++i){ if(tot + a[i].l_b <= sum){ ans[++top] = a[i].val; tot += a[i].l_b; } } if(tot < sum){ printf("-1"); return 0; } printf("%d\n", top); while(top--)printf("%d ", ans[top+1]); return 0;}

转载于:https://www.cnblogs.com/qixingzhi/p/9744555.html

你可能感兴趣的文章
ArcScene 高程不同的表面无法叠加
查看>>
[ONTAK2010] Peaks
查看>>
DLL 导出函数
查看>>
windows超过最大连接数解决命令
查看>>
12个大调都是什么
查看>>
angular、jquery、vue 的区别与联系
查看>>
参数范围的选择
查看>>
使用 MarkDown & DocFX 升级 Rafy 帮助文档
查看>>
THUPC2019/CTS2019/APIO2019游记
查看>>
Nodejs Express模块server.address().address为::
查看>>
4.3.5 Sticks (POJ1011)
查看>>
POJ 2960 S-Nim 博弈论 sg函数
查看>>
Dijkstra模版
查看>>
一个简单的插件式后台任务管理程序
查看>>
GDB调试多进程程序
查看>>
组合数
查看>>
第二章作业心得
查看>>
CMD批处理延时启动的几个方法
查看>>
转:LoadRunner中web_custom_request 和 web_submit_data的差别
查看>>
HTC G7直刷MIUI开启A2SD+亲测教程
查看>>