Codeforces 916B - Jamie and Binary Sequence (changed after round)
思路:
先取出二进制的每一位,判断总个数是不是小于等于k,如果大于k则不能构成。
通过观察可以发现,每一位的一个可以转换成下一位的两个,因为要使最大位尽可能小,所以如果最大位的所有的个数都可以转换成下一位那么就全部转换过去,如果不能就一个也不要转换,不然会导致字典序损失。
然后从最小的位开始转换,每次取出最小的位一个数,转换成下一位的两个,直到不能转换为止,这样就能保证字典序最大了,这个用优先队列维护下,可以直接求出来,直接for就可以了。
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a)) int a[]={};
int main(){
ios::sync_with_stdio(false);
cin.tie();
ll n;
ll k;
cin>>n>>k;
for(int i=;i<=;i++){
if(n&(1ll<<i))a[i+]=;
}
int cnt=;
for(int i=;i<=;i++){
if(a[i+])cnt++;
} if(cnt>k){
cout<<"No"<<endl;
return ;
}
else if(cnt==k){
cout<<"Yes"<<endl;
for(int i=;i>=;i--)if(a[i+])cout<<i<<' ';
cout<<endl;
return ;
}
else{
ll t=k-cnt;
while(true)
{
bool f=true;
for(int i=;i>=-;i--){
if(a[i+]){
if(t>=a[i+]){
t-=a[i+];
a[i+]+=a[i+]*;
a[i+]=;
f=false;
}
break;
}
}
if(f||t==)break;
}
priority_queue<ll,vector<ll>,greater<ll> >q;
for(int i=;i>=-;i--){
if(a[i+]){
for(int j=;j<a[i+];j++)q.push((ll)i);
}
}
while(t){
if(q.empty())break;
ll now=q.top();
q.pop();
t--;
q.push(now-);
q.push(now-);
}
cout<<"Yes"<<endl;
vector<ll>vc;
while(!q.empty()){
vc.pb(q.top());
q.pop();
}
for(int i=vc.size()-;i>=;i--)cout<<vc[i]<<' ';
cout<<endl;
}
return ;
}
Codeforces 916B - Jamie and Binary Sequence (changed after round)的更多相关文章
- CodeForces 916B Jamie and Binary Sequence (changed after round) (贪心)
题意:给定两个数字n,m,让你把数字 n 拆成一个长度为 m 的序列a1,a2,a3...am,并且∑2^ai = n,如果有多组,要求序列中最大的数最小,然后再相同就要求除了最大数字典序最大. 析: ...
- Jamie and Binary Sequence (changed after round) - CodeForces 916B
http://codeforces.com/problemset/problem/916/B 好尬啊... #include<cstdio> #include<algorithm&g ...
- Jamie and Binary Sequence (changed after round) CodeForces - 916B (贪心)
链接 大意: 求将n划分为k个2的幂的和, 且最大幂最小,字典序尽量大 比较简单的贪心练习题, 但放在div2的B题感觉偏难了..... 先只考虑最大幂最小, 首先注意到直接按n的二进制划分即可得到最 ...
- Codeforces 916B Jamie and Binary Sequence ( 模拟 && 思维 )
题意 : 给出一个数 n ,要求你用 k 个二的幂来组成这个数,要求输出这 k 个二的幂的指数,如果有多解情况则优先输出最大指数最小的那一个且要求按字典序输出,不存在则输出 No 分析 : 先来说一 ...
- CodeForces-916B-Jamie and Binary Sequence(changed after round)(构造)
链接: https://vjudge.net/problem/CodeForces-916B 题意: Jamie is preparing a Codeforces round. He has got ...
- 【Codeforces Round #457 (Div. 2) B】Jamie and Binary Sequence
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把n分解成二进制的形式. n=2^a0+2^a1+...+2^a[q-1] 则固定就是长度为q的序列. 要想扩展为长为k的序列. 可 ...
- ※数据结构※→☆非线性结构(tree)☆============二叉树 顺序存储结构(tree binary sequence)(十九)
二叉树 在计算机科学中,二叉树是每个结点最多有两个子树的有序树.通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用作二叉查找树和二叉堆或是 ...
- Codeforces 438D The Child and Sequence - 线段树
At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at ...
- codeforces 487C C. Prefix Product Sequence(构造+数论)
题目链接: C. Prefix Product Sequence time limit per test 1 second memory limit per test 256 megabytes in ...
随机推荐
- 软件包管理:rpm命令管理-包命名与依赖性
rpm包的管理主要有两种方法:一种是rpm命令管理另一种是yum在线管理 注意软件包没有扩展名,写上只是为了好看,便于识别而已. 注意区别包名,包全名.之所以要区分,就是因为有些命令十分挑剔,需要跟正 ...
- Servlet—作controller控制层
servlet控制器的改造步骤: 1.编写servlet类,和访问路径 2.修改jsp请求路径 servlet参数配置---获取初始化参数 servlet参数配置---全局参数
- testng使用DataProvider+Excel实现DDT
DDT,即数据驱动测试 Data Driver Test,我曾经记录了一篇关于python的DDT框架(Excel+DDT数据驱动实例),那么java中的DDT是怎么样的呢?在java中,可以用tes ...
- Hive 体系结构介绍
下面是Hive的架构图. 图1.1 Hive体系结构 Hive的体系结构可以分为以下几部分: (1)用户接口主要有三个:CLI,Client 和 WUI.其中最常用的是CLI,Cli启动的时候,会同时 ...
- linux服务器---安装swat
安装swat swat是一个图形化的samba管理软件,可以帮助不熟悉的人去灵活的配置samba服务, 1.安装swat [root@localhost wj]#yum install -y samb ...
- DNS视图及压力测试(四)
Bind安全控制选项 Allow-transfer {}; #用于控制区域传送文件 Allow-query {}; #通常用于服务器是缓存名称服务器时,控制查询客户端 Allow-recursion ...
- 看阿里P9架构师如何向你定义架构及架构师
架构的定义 先来看看软件架构的普遍定义吧. 一个程序和计算系统软件体系结构是指系统的一个或多个结构.结构中包括软件的构建,构建的外部可见属性以及它们之间的相互关系. 体系结构并非可运行软件.确切的说, ...
- 华为C/C++笔试题&答案
1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问 ...
- SNMP学习笔记之SNMPv3的配置和认证以及TroubleShooting
0x00 增加snmp v3用户 增加用户的时候,必须要停止SNMP服务. # service snmpd stop # net-snmp-config --create-snmpv3-user -r ...
- Idea中Maven仓库配置会自动恢复
手头有好几个项目,关闭一个项目,打开另一个项目,发现又在重新下载jar包,打开设置一看,maven配置又恢复到了.m2下边.idea配置的maven会自动恢复吗? 答案是否定的,idea的设置有两个, ...