CF1225C p-binary

洛谷评测传送门

题目描述

Vasya will fancy any number as long as it is an integer power of two. Petya, on the other hand, is very conservative and only likes a single integer pp (which may be positive, negative, or zero). To combine their tastes, they invented pp -binary numbers of the form 2^x + p2x+p , where xx is a non-negative integer.

For example, some -9−9 -binary ("minus nine" binary) numbers are: -8−8 (minus eight), 77 and 10151015 ( -8=2^0-9−8=20−9 , 7=2^4-97=24−9 , 1015=2^{10}-91015=210−9 ).

The boys now use pp -binary numbers to represent everything. They now face a problem: given a positive integer nn , what's the smallest number of pp -binary numbers (not necessarily distinct) they need to represent nn as their sum? It may be possible that representation is impossible altogether. Help them solve this problem.

For example, if p=0p=0 we can represent 77 as 2^0 + 2^1 + 2^220+21+22 .

And if p=-9p=−9 we can represent 77 as one number (2^4-9)(24−9) .

Note that negative pp -binary numbers are allowed to be in the sum (see the Notes section for an example).

输入格式

The only line contains two integers nn and pp ( 1 \leq n \leq 10^91≤n≤109 , -1000 \leq p \leq 1000−1000≤p≤1000 ).

输出格式

If it is impossible to represent nn as the sum of any number of pp -binary numbers, print a single integer -1−1 . Otherwise, print the smallest possible number of summands.

输入输出样例

输入 #1复制

输出 #1复制

输入 #2复制

输出 #2复制

输入 #3复制

输出 #3复制

输入 #4复制

输出 #4复制

输入 #5复制

输出 #5复制

说明/提示

00 -binary numbers are just regular binary powers, thus in the first sample case we can represent 24 = (2^4 + 0) + (2^3 + 0)24=(24+0)+(23+0) .

In the second sample case, we can represent 24 = (2^4 + 1) + (2^2 + 1) + (2^0 + 1)24=(24+1)+(22+1)+(20+1) .

In the third sample case, we can represent 24 = (2^4 - 1) + (2^2 - 1) + (2^2 - 1) + (2^2 - 1)24=(24−1)+(22−1)+(22−1)+(22−1) . Note that repeated summands are allowed.

In the fourth sample case, we can represent 4 = (2^4 - 7) + (2^1 - 7)4=(24−7)+(21−7) . Note that the second summand is negative, which is allowed.

In the fifth sample case, no representation is possible.

题解:

对于一个给定的\(n,p\),试求一个最小的\(k\),使得存在:

\[\sum_{i=1}^{k}{(2^{a_i}+p)}
\]

那么对于题意,我们很容易发现,这个数就是多加了\(i\)个\(p\),如果把这\(i\)个\(p\)去掉,那么就显然可以把这个数\(n-i\times p\)进行二进制拆分,拆成很多个二的整数次幂之和,我们要求出这个最小的加数数量。

根据二进制拆分的原则,我们把这个数\(n-i\times p\)用二进制表示,其中有\(1\)对应的第\(i\)位就是\(2^{i-1}\)(根据位运算的性质)。

那么,我们算出来这个数\(n-i\times p\)的二进制表示中1的个数,如果这个个数比\(i\)大,那么就不合法(这是显然的)。并且,如果\(n-i\times p<i\),那么也不合法。

那么我们从小到大枚举,判断一下即可。

如有对lowbit运算不太了解的同学,可参考本蒟蒻的这篇博客:

浅谈lowbit运算

代码:

#include<cstdio>
using namespace std;
int n,p,ans,flag;
int lowbit(int x)
{
int ret=0;
while(x)
{
x-=x&-x;
ret++;
}
return ret;
}
int main()
{
scanf("%d%d",&n,&p);
for(int i=1;;i++)
{
if(n-i*p<i)
break;
if(lowbit(n-i*p)>i)
continue;
ans=i;
flag=1;
break;
}
if(flag)
{
printf("%d",ans);
return 0;
}
else
{
printf("-1");
return 0;
}
}

CF1225C p-binary的更多相关文章

  1. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

  2. ILJMALL project过程中遇到Fragment嵌套问题:IllegalArgumentException: Binary XML file line #23: Duplicate id

    出现场景:当点击"分类"再返回"首页"时,发生error退出   BUG描述:Caused by: java.lang.IllegalArgumentExcep ...

  3. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  4. Leetcode 笔记 99 - Recover Binary Search Tree

    题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...

  5. Leetcode 笔记 98 - Validate Binary Search Tree

    题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...

  6. Leetcode: Convert sorted list to binary search tree (No. 109)

    Sept. 22, 2015 学一道算法题, 经常回顾一下. 第二次重温, 决定增加一些图片, 帮助自己记忆. 在网上找他人的资料, 不如自己动手. 把从底向上树的算法搞通俗一些. 先做一个例子: 9 ...

  7. Leetcode, construct binary tree from inorder and post order traversal

    Sept. 13, 2015 Spent more than a few hours to work on the leetcode problem, and my favorite blogs ab ...

  8. [LeetCode] Binary Watch 二进制表

    A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom ...

  9. [LeetCode] Find Leaves of Binary Tree 找二叉树的叶节点

    Given a binary tree, find all leaves and then remove those leaves. Then repeat the previous steps un ...

随机推荐

  1. 8. Vue - Router

    一.Vue Router 的使用 JavaScript: 1.创建组件:创建单页面应用需要渲染的组件 2.创建路由:创建VueRouter实例 3.映射路由:调用VueRouter实例的map方法 4 ...

  2. day89_11_11Flask启动,配置,路由,fbv和cbv

    一.flask的形成. flask是一个基于python并且以来jinja2模板和werkzeug wsgi服务器的一个微型框架. 安装了flask模块就代表安装了wekzeug,所以先安装flask ...

  3. 03. Go 语言容器

    Go语言容器(container) 变量在一定程度上能满足函数及代码要求.如果编写一些复杂算法.结构和逻辑,就需要更复杂的类型来实现.这类复杂类型一般情况下具有各种形式的存储和处理数据的功能,将它们称 ...

  4. Python网络编程基础 struct模块 解决黏包问题 FTP

    struct模块 解决黏包问题 FTP

  5. JS做的类似腾讯专题图片播放器,大家可以一起来改进!

    我是一个应届生,来公司不久,根据需求,网站需要一个专题图片轮播的页面.网上确实有很多现成的插件,但是,作为一个JS还不是很牛的应届生,我决定自己写一个! 话说忽然想到做个这个还真不容易,一时思绪理不清 ...

  6. 【STM32H7教程】第17章 STM32H7之GPIO的HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第17章       STM32H7之GPIO的HAL库API ...

  7. spring cloud 2.x版本 Gateway自定义过滤器教程

    前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...

  8. ASP.NET Core Identity 的示例

    1. appsettings.json { "ConnectionStrings": { "DefaultConnection": "Server=( ...

  9. wpf button style IsMouseOver

    <Style x:Key="workButtonStyle" TargetType="{x:Type Button}"> <Style.Tri ...

  10. python-execjs(调用js)

    一.安装 pip3 install PyExecJS 电脑上要有nodejs环境 二.使用 一.获取js字符串 首先将js保存至于本地文件或者你可以可以直接读到内存,必须让js以字符串的形式展示 注意 ...