洛谷P1582 倒水 二进制的相关应用
https://www.luogu.org/problem/P1582
#include<bits/stdc++.h>
using namespace std;
long long N,K,x,ans,k;
bool a;
int main() {
cin>>N>>K;
for(register int i=N; i>;) { // register关键字请求让编译器将变量a直接放入寄存器里面,以提高读取速度
if(i%==) {
x++;
}
i>>=; //二进制下为除去最后一位,十进制下为除以2
}
if(x<=K) {
cout<<<<endl;
return ; //如果此时最终合并的数目就小于等于K,则不用买,直接输出
}
for(register int j=;;) {
k=;
x=;
a=false;
for(register int i=N+j; i>;) {
if(i%==) {
x++;
a=true;
}
if(a==false&&i%==) { //二进制下从右向左寻找第一个1 位置
k++;
}
i>>=; //除去二进制最后一位 或者在十进制下除以2
}
if(x<=K) { //如果加1之后最终合并的个数x小于K 则直接输出j
ans=j;
break;
} //假设二进制下从右向左第一位就是1,那么就不会进入第二个if,然后一直循环,算出1
//的数量,然后判断是否小于K,如果不满足,就在第一位,即第一个1的位置让他再加1,这是二进制下的加,要换算成十进制
j=j+pow(,k); //如果不行,二进制下自加一个1,直到成立 然后进入一下次循环,首先清零,寻找第一个1的位置
}
cout<<ans<<endl;
return ;
}
洛谷P1582 倒水 二进制的相关应用的更多相关文章
- 洛谷P1582 倒水 二进制 lowbit __builtin_popcount
P1582 倒水:https://www.luogu.org/problemnew/show/P1582 题意: 给定n瓶装有1升的水瓶,每次可以把两瓶装水量相同的水和成一瓶,问最少还要增加几瓶装有1 ...
- 洛谷 P1582 倒水 解题报告
P1582 倒水 题目描述 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前含水量相同的瓶子,把 ...
- 洛谷P1582 倒水
P1582 倒水 题目描述 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前含水量相同的瓶子,把 ...
- 洛谷 P1582 倒水 (二进制)
这道题实际上是考二进制 很容易看出杯子水量一定是2的i次方 所以n杯水最后剩下的水一定是n用二进制表示中1的个数 所以就枚举n来求什么时候1的个数小于k 那么这里有个优化,不然会超时 因为每次加的目的 ...
- 洛谷P1582 倒水题解
题目 分析 这个题并不难,只是需要仔细思考我们首先可以很轻松的把这个题给疏通一下题意. 1:首先我们最后每个瓶子中装的水一定是一个$2^x$,因为每次都是$2$倍的加,这个应该很好理解. 2:我们要明 ...
- 洛谷 - P1582 - 倒水 - 位运算
https://www.luogu.org/problemnew/show/P1582 要求用最少的瓶子,那肯定不能有两个一样的瓶子,否则合并更优. 枚举其二进制位,每次加上lowbit,将最后一个1 ...
- 洛谷P1582——倒水(进制,数学)
https://www.luogu.org/problem/show?pid=1582 题目描述 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了 ...
- 洛谷 P1582 倒水
题目描述 一天,CC买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着~~CC发现瓶子实在太多了,于是他决定保留不超过K个瓶子.每次他选择两个当前含水量相同的瓶子,把一个瓶子的水全部倒 ...
- Java实现 洛谷 P1582 倒水
import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import ...
随机推荐
- Balanced Lineup POJ - 3264
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> us ...
- 吴裕雄--天生自然 HADOOP大数据分布式处理:安装XShell
下载安装包
- scrapy(一)--Pycharm创建scrapy项目
1.环境 操作系统:windows10. python版本:python3.6,Anaconda(将Anaconda3\Scripts;路径添加到环境变量Path中) pycharm:pycharm2 ...
- HDU1070 - Milk
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1070 解题思路:主要考察C结构体排序. #include <bits/stdc++.h> ...
- tensorflow数据统计
本篇内容包括,tf.norm(张量的范数).tf.reduce_min/max(最大最小值).tf.argmax/argmin(最大最小值的位置).tf.equal(张量的比较).tf.unique( ...
- html无卡顿动画实现——requestAnimationFrame
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- MST Unification CodeForces - 1108F
#include<iostream> #include<cstring> #include<algorithm> using namespace std; ; in ...
- C++11智能指针(unique_ptr、shared_ptr、weak_ptr)(转)
原文地址:https://blog.csdn.net/king_way/article/details/95536938
- HashMap源码刨析(面试必看)
目录 1.Hash的计算规则? 2.HashMap是怎么形成环形链表的(即为什么不是线程安全)?(1.7中的问题) 3.JDK1.7和1.8的HashMap不同点? 4.HashMap和HashTab ...
- LeetCode Subarray Product Less Than K 题解 双指针+单调性
题意 给定一个正整数数组和K,数有多少个连续子数组满足: 数组中所有的元素的积小于K. 思路 依旧是双指针的思路 我们首先固定右指针r. 现在子数组的最右边的元素是nums[r]. 我们让这个子数组尽 ...