nbuoj2784 倒水
题目:http://www.nbuoj.com/v8.83/Problems/Problem.php?pid=2784
一天,TJ买了N个容量无限大的瓶子,开始时每个瓶子里有1升水。接着TJ决定只保留不超过K个瓶子。每次他选择两个含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。
显然在某些情况下TJ无法达到目标,比如N=3,K=1。此时TJ会重新买一些新的瓶子(这些瓶子一开始也会有一升水),以达到目标。
现在TJ想知道,最少需要买多少新瓶子才能达到目标呢?
输入:
每组一行两个正整数, N,K(1≤N≤2e9,K≤1000 )。
样例:
input:
2
3 1
13 2
output:
1
3
思路:
①直接枚举(竟然不会超时)
②可以把瓶子转换成二进制的数,例如n=13如果不买新瓶子最终能变成8,4,1,想要瓶子数不增加,只能买n的二进制位最小的1的数量的瓶子,例如13要买1个瓶子,12要买4个瓶子,8要买8个瓶子。这是对购买数量的剪枝。记得特判,/(ㄒoㄒ)/~~
官方题解:

附上本蒟蒻的代码:
暴力,__builtin_popcount(n)求n的二进制时1的个数:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k,ans;
cin>>n>>k;
int tmp=__builtin_popcount(n);
if(k>=tmp)ans=;
else
{
for(int i=n;;i++)
{
int tmp2=__builtin_popcount(i);
if(tmp2<=k)
{
ans=i;
break;
}
}
ans=ans-n;
}
cout<<ans<<endl;
}
return ;
}
lowbit()优化,lowbit()是求x的二进制时最低位的1的2^k的值,cal()是求n的二进制时1的个数:
#include<bits/stdc++.h>
using namespace std;
int lowbit(int x)
{
return x&-x;
}
int cal(int x)
{
int cnt=;
while(x)
{
cnt++;
x&=(x-);
}
return cnt;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,k,ans=;
cin>>n>>k;
while(cal(n)>k)
{
ans+=lowbit(n);
n+=lowbit(n);
}
cout<<ans<<endl;
}
return ;
}
想了解更多lowbit(),出门左拐搜树状数组
nbuoj2784 倒水的更多相关文章
- 广度优先搜索 cdoevs 1226 倒水问题
cdoevs 1226 倒水问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升 ...
- 倒水问题 (codevs 1226) 题解
[问题描述] 有两个无刻度标志的水壶,分别可装x升和y升 ( x,y 为整数且均不大于100)的水.设另有一水缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知x升壶为空壶, ...
- POJ 3414 Pots【bfs模拟倒水问题】
链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...
- yzoi1777倒水问题的详细解法
Description - 问题描述 x.y.z三个容器,其最大容量分别是xMAX升.yMAX升.zMAX升,这里规定100>xMAX>yMAX>zMAX.一开始x是装满了水的,现在 ...
- codevs1226倒水问题(Bfs)
/* 首先建立模型 可以看成是三个水杯 第三个无穷大 (这里看成是201足够了) 最少步数 想到Bfs 维护队列里的状态:要有个步数 还要有v :此时刻三个杯子有多少水 然后倒水:因为没有刻度 所以有 ...
- 倒水问题-->经典面试题目
题目详细: 有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水.我们还有一个足够大的水缸,足够容纳C升水.起初它是空的,我们只能往水缸里倒入水,而不能倒出.可以进行的操作是:把一个容器灌满 ...
- 倒水问题 (FillUVa 10603) 隐式图
题意:本题的题意是给你三个杯子,第一二个杯子是空的,第三个杯子装满水,要求是量出一定容量d升的水.若是得不到d升的水,那就让某一个杯子里面的水达到d',使得d'尽量接近d升. 解题思路:本题是给出初始 ...
- uva10603 倒水问题
状态搜索.类似八数码问题 AC代码 #include<cstdio> #include<queue> #include<cstring> #include<a ...
- 美团codeM预赛A轮 倒水
[编程题] 倒水 时间限制:1秒 空间限制:32768K 有一个大水缸,里面水的温度为T单位,体积为C升.另有n杯水(假设每个杯子的容量是无限的),每杯水的温度为t[i]单位,体积为c[i]升. 现在 ...
随机推荐
- Windows系统下搭建WAMP环境
Wamp就是Windos Apache Mysql PHP集成安装环境,即在window下的apache.php和mysql的服务器软件.其中php环境配置是至关重要的一部分,本文就针对php在本地的 ...
- [UWP]使用Win2D的BorderEffect实现图片的平铺功能
1. WPF有,而UWP没有的图片平铺功能 在WPF中只要将ImageSource的TileMode属性设置为Tile即可实现图片的平铺,具体可见WPF的这些文档: ImageBrush 类 (Sys ...
- Mybatis动态语句部分收集
where: <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BL ...
- 使用 Zephir 轻松构建 PHP 扩展
简介: 通过 PHP 扩展, 我们可以在 php 代码中使用一些特定的方法(大部分的 php 扩展都是用 C 写的). 比如,在 PHP 中需要与 SQLite3 交互,我们可以自己写方法与之进行连接 ...
- [ISE调试] 在ISE调试过程中,遇到过的warning以及消除办法
1.在generate的过程中,在Map环节遇到了下面这个warning 意思:告诉你是黑盒子,而且他本来在设计里面就是黑盒子. 解决办法:点击图中的,会弹出一个代码文件,是声明这个IP核的文件,代码 ...
- [第二章]了解storm
1.什么是storm Apache Storm is a free and open source distributed realtime computation system. 免费.开源.分布式 ...
- 视频抓取利器you-get
本文链接:https://github.com/soimort/you-get/wiki/%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E You-Get 乃一小小哒命令行程序 ...
- tomcat-9.0.20缓存空间不足
问题2:启动时候报这样的警告:警告 [main] org.apache.catalina.webresources.Cache.getResource 无法将位于[/WEB-INF/classes/t ...
- Python 并发总结,多线程,多进程,异步IO
1 测量函数运行时间 import time def profile(func): def wrapper(*args, **kwargs): import time start = time.tim ...
- 关于C# 语言
C# 语法高度重视表达,但学习起来也很简单轻松. 任何熟悉 C.C++ 或 Java 的人都可以立即认出 C# 的大括号语法. 通常情况下,了解上述任何一种语言的开发者可以在很短的时间内就开始使用 C ...