Time Limit: 1 second

Memory Limit: 128 MB

【问题描述】

一天辰辰买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着辰辰发现瓶子实在太多了,于是他决定保留不超

过K个瓶子,每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃(不能丢弃有水的瓶

子)。 显然在某些情况下辰辰无法达到目标,比如N=3,K=1。此时辰辰会重新购买一些新的瓶子(新瓶子容量无限,开始时有1升水)

以达到目标。

现在辰辰想知道最少需要多少新瓶子才能达到目标呢?

【数据规模】

对于50%的数据,n<=10^7;对于100%的数据如题目。

【提示】考虑lowbit运算

【输入格式】

输入文件一行两个正整数N和K,其中1<=n<=10^9,k<=1000。

【输出格式】

输出文件包含一个非负整数,表示最少需要购买的瓶子数量。

Sample Input

3 1

Sample Output

1

Sample Input2

13 2

Sample Output2

3

Sample Input2

1000000 5

Sample Output2

15808

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t088

【题解】



首先把n转换成二进制;

这个n能够分成的最小的水的数量就为二进制中1的个数;

因为2^x的水能够合成1瓶水;

然后考虑这样的形式

1 0 1 1 1 0

如果想让1的个数变少一点;

可以考虑加上最低位的1对应的数字这里即2

然后就会变成

1 1 0 0 0 0

这样做最少能保证消掉一个0、加上1个0,而且可能会有上面的消除多个0的情况,所以肯定不会变差(1的个数肯定不会变多);

一直重复上述过程直到1的个数小于等于k就好

(如果写过树状数组就知道lowbit操作了x&(-x)就是获取最低的1对应的数字)



【完整代码】

#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int MAXN = 100; int n,k;
int cnt = 0,ans = 0; int get_num(int n)
{
cnt = 0;
while (n)
{
cnt+=(n&1);
n>>=1;
}
return cnt;
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
rei(n);rei(k);
while (get_num(n)>k)
{
ans+=(n&(-n));
n=n+(n&(-n));
}
printf("%d\n",ans);
return 0;
}

【t088】倒水的更多相关文章

  1. 广度优先搜索 cdoevs 1226 倒水问题

    cdoevs 1226 倒水问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升 ...

  2. 倒水问题 (codevs 1226) 题解

    [问题描述] 有两个无刻度标志的水壶,分别可装x升和y升 ( x,y 为整数且均不大于100)的水.设另有一水缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知x升壶为空壶, ...

  3. POJ 3414 Pots【bfs模拟倒水问题】

    链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...

  4. yzoi1777倒水问题的详细解法

    Description - 问题描述 x.y.z三个容器,其最大容量分别是xMAX升.yMAX升.zMAX升,这里规定100>xMAX>yMAX>zMAX.一开始x是装满了水的,现在 ...

  5. codevs1226倒水问题(Bfs)

    /* 首先建立模型 可以看成是三个水杯 第三个无穷大 (这里看成是201足够了) 最少步数 想到Bfs 维护队列里的状态:要有个步数 还要有v :此时刻三个杯子有多少水 然后倒水:因为没有刻度 所以有 ...

  6. 倒水问题-->经典面试题目

    题目详细: 有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水.我们还有一个足够大的水缸,足够容纳C升水.起初它是空的,我们只能往水缸里倒入水,而不能倒出.可以进行的操作是:把一个容器灌满 ...

  7. 倒水问题 (FillUVa 10603) 隐式图

    题意:本题的题意是给你三个杯子,第一二个杯子是空的,第三个杯子装满水,要求是量出一定容量d升的水.若是得不到d升的水,那就让某一个杯子里面的水达到d',使得d'尽量接近d升. 解题思路:本题是给出初始 ...

  8. uva10603 倒水问题

    状态搜索.类似八数码问题 AC代码 #include<cstdio> #include<queue> #include<cstring> #include<a ...

  9. 美团codeM预赛A轮 倒水

    [编程题] 倒水 时间限制:1秒 空间限制:32768K 有一个大水缸,里面水的温度为T单位,体积为C升.另有n杯水(假设每个杯子的容量是无限的),每杯水的温度为t[i]单位,体积为c[i]升. 现在 ...

随机推荐

  1. MySQL非安装版安装

    1 数据库的打开方式(非安装版本) 1.解压mysql-5.7.12-winx64.zip到一个路径上没有空格没有汉字的目录中 2.复制my-default.ini重命名为my.ini 3.命令行进入 ...

  2. jquery全屏图片滑动切换

    在线演示 本地下载

  3. ubuntu16.04如何查看内存和CPU的使用情况

    ubuntu16.04如何查看内存和CPU的使用情况? 使用一下命令: gnome-system-monitor

  4. 【水滴石穿】AB-B-Clone

    地址: 源码 运行效果 无别的效果,代码如下 //index.js /** * @format * @lint-ignore-every XPLATJSCOPYRIGHT1 */ import {Ap ...

  5. ROS开发过程中遇到:Could not find a package configuration file provided by "qt_build" with any of the following names: qt_buildConfig.cmake qt_build-config.cmake........

    最近在搭建QT开发ROS 界面的环境,遇到了很多问题,参考了很多资料,最后发现有些问题其实没有那么复杂,只是我们对整体环境还不了解,熟悉了以后你会发现有些问题就迎刃而解了. 在这个过程中,我首先新建了 ...

  6. 微服务开源生态报告 No.1

    从关注开源,到使用开源,再到参与开源贡献,越来越多的国内开发者通过开源技术来构建业务. 截止目前,Arthas / Dubbo / ChaosBalde / Nacos / RocketMQ / Se ...

  7. pandas数据框,统计某列或者某行数据元素的个数

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sinat_38893241/articl ...

  8. python----操作Memcache、redis、RabbitMQ、SQLAlchemy

    操作本质都是通过socket发送命令 Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次 ...

  9. Twitter 宣布抛弃 Mesos,全面转向Kubernetes

    摘要: 从最早Mesos“代言人”到如今的全面转向“Kubernetes Native”,Twitter的举动再一次佐证了‘Kuberentes已经成为容器编排事实标准’这一断言. 本文作者:张磊 阿 ...

  10. uni-app禁止滑动穿透

    <view class="topWrapper" v-show="chooseShow" @click="chooseShow = false& ...