ZCMU 1854: zbj的可乐

Description

zbj最近特别想喝可乐,然而可口可乐有一个万年梗的活动就是....四个瓶盖换一瓶可乐的活动 
现在zbj想喝n瓶可乐,一瓶可乐需要k元,问他最少需要花多少钱? 
ps.一瓶可乐只有一个瓶盖..当然这不是脑筋急转弯,zbj并不能向别人借瓶盖。

Input

有多组样例,每一行输入一个正整数n,k(0<=n<=100000000  1<=k<=200) (请不要嘲讽zbj能喝...我们要友好和谐)

Output

每一行输出一个正整数表示zbj最小需要花的钱

Sample Input

1597 3

Sample Output

3594

思路

瓶盖换可乐万年梗系列,这题其实有公式,鉴于蒟蒻数学不咋地,推不出来,就只能默默用算法了。

于是乎,这道题抛开公式就是一道二分查找,我们可以通过对zbj花钱购买的可乐进行以0和n为left,right端点的二分查找,统计购买mid=(left+right)/2数量的可乐最终能够获得多少瓶可乐,再将连买带换的可乐数同zbj想要喝的可乐数相比,若大于则说明多买了,向左查找,小于说明买少了,向右查找,最后将需要买的可乐数乘上价格k即为结果。

这题本蒟的代码中初始左端点设为了1,无法计算出n=0时的正确输出0,导致WA,加上if排除后解决。

AC代码

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#include <cstring>
#include <string>
#include <list>
#include <algorithm>
#include <set>
#include <list>using namespace std;int n, k;//用来统计连买带换能得到多少瓶可乐
long long countn(long long brought)
{long long cups = brought, bottles = brought;while(cups/4!=0){long long newb = cups / 4;bottles += newb;cups = cups % 4 + newb;}return bottles;
}//对买的可乐数进行二分查找
long long find()
{//此处left改为0即可得出n=0的正确结果,无需下面的if判断long long int left = 1, right = n, mid;while(left<=right){mid = (left + right) / 2;long long bottles = countn(mid);if (bottles >= n)right = mid - 1;elseleft = mid + 1;}return left;
}int main()
{while(scanf("%d%d",&n,&k)!=EOF){long long cost;if (n == 0)cost = 0;else cost = find()*k;printf("%lld\n", cost);}return 0;
}

ZCMU 1854: zbj的可乐【二分查找】相关推荐

  1. 1854: zbj的可乐(思维题)

    1854: zbj的可乐 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 376 Solved: 111 [Submit][Status][Web Boa ...

  2. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  3. LeetCode简单题之二分查找

    题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...

  4. 二分查找模板全面总结

    二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...

  5. 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)

    目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...

  6. 二分查找算法的一点改进

    在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法.这种搜索算法每一次比较都使搜索范围减半.第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年 ...

  7. 二分法:二分查找(递归+非递归)实现

    二分查找又称折半查找,首先,假设表中元素是按升序排列,将 表中间位置的关键字与查找关键字比较: 如果两者相等,则查找成功; 否则利用中间位置将表分成前.后两个子表: 1)如果中间位置的关键字大于查找关 ...

  8. python数据结构与算法:二分查找

    二分查找:python 实现 def binary_seaech(alist,item):"""二分查找 递归实现"""n = len(al ...

  9. 【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作

    目录 一.lower_bound 1.原型: 2.说明: 3.官方demo 二.upper_bound 1.原型: 2.说明: 3.官方demo 三.binary_search 1.原型: 2.说明: ...

  10. 二分查找的循环实现和递归实现

    自己实现了二分查找的循环实现和递归实现 说明:二分查找适用于顺序存储结构,不适于链式存储结构,是一个高效的查找方法.虽然折半查找效率高,但是要排序,排序本身是一种很费时的运算.     要求传入的表是 ...

最新文章

  1. rpmdb open failed 的解决办法
  2. 中石油《计算机应用基础》,中石油华东《计算机应用基础》2018年秋学期在线作业(一).doc...
  3. 作为Java初学者,你了解Java的应用范围吗?
  4. 程序员数学基础【一、基础运算符号(整数、普通浮点数运算、逻辑运算)】(Python版本)
  5. 39所强基计划试点高校已全部公布招生简章
  6. P6240 好吃的题目(分治+背包)
  7. laydate点击输入框闪一下不见了_爱剪辑:如何制作抖音、苹果风格的快闪视频...
  8. 除了汪峰,还有哪些明星跨界做智能硬件
  9. 盼达用车:由于公司经营原因 2月1日起暂停运营
  10. pytorch手动安装开发包
  11. TNG-Hooks:有状态逻辑在标准函数中的重用和组合
  12. 贝壳找房的深度学习模型迭代及算法优化
  13. 北斗导航 | RAIM接收机自主完好性检测(附代码)
  14. window核心编程 22.3 DIPS.exe的踩坑逻辑梳理
  15. 虫虫asp建站源码_新云CMS仿完美下载站整站源码
  16. word 文档密码 html,Word文档密码解决打开方法
  17. 实例(C++解一元二次方程)
  18. discuz 获取会员头像
  19. 华为出击,智能汽车大蝶变
  20. R语言自学笔记-----数据转换

热门文章

  1. 图神经网络(四)图分类(4)图分类实战完整代码
  2. 安装ceph时,出现Some monitors have still not reached quorum
  3. 基于FPGA的网口通信设计(完结)
  4. 智慧农业大棚app是什么
  5. 寓言一则 -- 在解决实际问题方法上差异
  6. 独立思维,离群并不孤独
  7. window 安装 sass compass 记录
  8. Serv-U到期后解决办法
  9. 语音合成 - TTS-VUE 学习
  10. LCD基础及S3C2410 LCD控制器