水王争霸
来源:互联网 发布:数据库原理视频教程 编辑:程序博客网 时间:2024/05/16 01:37
Description
为了丰富校园网络生活,学校 BBS 举行了一次水王争霸赛。比赛开始后,选手们疯狂灌水,都想争取到水王这个荣誉称号。但学校的 BBS 是如此的不堪一击,才 1e-3 秒就超负荷了。
现在需要把选手们灌的水集合起来,降低服务器负荷。
事情是这样得到处理的:
假设每个选手每次灌水量为1L,每灌一次水,服务器就用一个容量为无限的虚拟容器收集这1L水。
最后服务器中有N个容器收集了水。而服务器最多能负载K个装了水的容器。但是,服务器只有一种自救措施:就是把两个装了同样多水的容器合并到这两个容易中的其中一个,另一个空了的直接free它。
然而不能排除这种情况的存在:通过自救方式,仅由选手们灌好的N容器水不能恰恰好收集成不超过K个非空容器来装。比如,N=3,K=1的时候,无论如何收集,都只能得到容量分别为1L和2L的两个非空容器,不可能得到符合要求的1个非空容器。幸运的是,服务器还有一点点空间,允许你再灌若干次水,使得 BBS 恢复正常。拯救服务器中的虚拟世界这个艰巨而光荣的任务就落到你身上了。Input
有1000组输入数据,每组输入数据一行,包含两个正整数N、K,其中N不超过10,000,000,K不超过1,000。
- Output
输出最少需要继续灌水的次数,如果不可能拯救服务器,输出-1。
- Sample Input
3 1
13 2
1000000 5
100 100
- Sample Output
1
3
15808
0
#include<iostream>#include<cmath>using namespace std;int main(){ int N,K,i,power[25],flag,ans; while(scanf("%d %d",&N,&K)!=EOF) { flag=0,ans=0; for(i=0;i<25;i++) { if(N&(1<<i)) power[flag++]=1<<i; } if(K>=flag) ans=0; else { int aa=flag-K; ans=power[aa]; for(i=0;i<aa;i++) ans-=power[i]; } printf("%d\n",ans); } return 0;}
0 0
- 水王争霸
- 水王争霸
- 水王争霸
- 1225 -- 水王争霸
- SSL1549 水王争霸
- 水王争霸
- 1549 水王争霸
- 水王争霸
- 水王争霸 训练
- [Vijos]P1257 水王争霸
- noj 1052 水王争霸
- 【多级排序】水王争霸
- 【SSLGZ 1549】水王争霸
- NOJ1052水王争霸——理解
- 南邮 OJ 1052 水王争霸
- 猪王争霸
- SSL 1549_水王争霸_排序
- SSL 1549_水王争霸_排序
- 飞机最少换乘次数问题
- 初识WebP
- DIY:使用扩展程序在Chrome下干掉各种恶心的广告
- input输入框中的光标上下不居中的解决方法
- Java内存模型
- 水王争霸
- 别人——要什么
- LINQ使用与并行
- ZigZag Conversion
- 牛顿迭代法
- 访问者模式(Vistor Pattern)
- LeetCode 118 Pascal's Triangle
- 回文回文!
- 银行储蓄系统