P1582倒水 位运算
2024-09-06 23:40:57
题目描述
一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水。接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子。每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒进另一个里,然后把空瓶丢弃。(不能丢弃有水的瓶子)
显然在某些情况下CC无法达到目标,比如N=3,K=1。此时CC会重新买一些新的瓶子(新瓶子容量无限,开始时有1升水),以到达目标。
现在CC想知道,最少需要买多少新瓶子才能达到目标呢?
输入输出
输入格式:
一行两个正整数, N,K(1≤N≤2e9,K≤1000 )。
输出格式:
一个非负整数,表示最少需要买多少新瓶子。
样例
输入样例#1: 3 1
输出样例#1: 1
输入样例#2: 13 2
输出样例#2: 3
分析:
显然与二进制有关,我们最后的ans一定是k个2的幂次相加最接近n的最小值,考虑从最后往前的第一个1开始加起,直到1的个数等于k为止。
ps:最后一个1为x^-x
代码:
#include"bits/stdc++.h"
#define ci(x) scanf("%d",&x)
#define pi(x) printf("%d\n",x)
using namespace std;
int n,k;
int work(int x){
int cnt=;
for(;x;x-=x&-x) cnt++;
return cnt;
}
int main() {
ci(n),ci(k);
int ans=;
while(work(n)>k) ans+=n&-n,n+=(n&-n);
pi(ans);
}
最新文章
- Ubuntu下开启php调试模式,显示报错信息
- ECshop后台角色权限的添加和分配
- 【虚拟机】苹果虚拟机mac10.11.6+Xcode8.1
- 基于docker+etcd+confd + haproxy构建高可用、自发现的web服务
- 使用dynamic类型改进反射
- [iOS微博项目 - 3.2] - 发送微博
- Find the Clones
- php 操作数组 (合并,拆分,追加,查找,删除等)
- hdu 4707 Pet(DFS水过)
- Android生命周期注意事项
- hdu--1800--字典树&;&;其他
- MinGW是什么
- 原生javascript学习
- ORACLE 创建表空间、用户、授权
- ABAP 开启制定路径下的文件或网址URL
- pyecharts使用
- python单元测试框架unittest总结
- IDEL中easyui使用jstl和el出现传值不显示的问题
- luasocket 安装记录 (FS1.6)
- python 3 往Excel 中的写入内容但不覆盖原内容
热门文章
- 软件测试技术第三次作业——打印质数printPrimes()
- maven课程 项目管理利器-maven 3-5 maven生命周期和插件 4星
- Python人工智能之初识接口
- jQueryMobile(二)
- memcached 的配置及 spymemcached 客户端简单使用
- 搭建Web开发环境JavaEE_Eclipse
- Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 iBrand API 教程
- TP5.1:连接数据库(全局配置、动态配置、DSN配置)
- 为什么CRM Opportunity的删除会触发一个通向BW系统的RFC
- CPP-基础:类