ZCMU 1854: zbj的可乐【二分查找】
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的可乐【二分查找】相关推荐
- 1854: zbj的可乐(思维题)
1854: zbj的可乐 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 376 Solved: 111 [Submit][Status][Web Boa ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- LeetCode简单题之二分查找
题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...
- 二分查找模板全面总结
二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...
- 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...
- 二分查找算法的一点改进
在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法.这种搜索算法每一次比较都使搜索范围减半.第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年 ...
- 二分法:二分查找(递归+非递归)实现
二分查找又称折半查找,首先,假设表中元素是按升序排列,将 表中间位置的关键字与查找关键字比较: 如果两者相等,则查找成功; 否则利用中间位置将表分成前.后两个子表: 1)如果中间位置的关键字大于查找关 ...
- python数据结构与算法:二分查找
二分查找:python 实现 def binary_seaech(alist,item):"""二分查找 递归实现"""n = len(al ...
- 【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作
目录 一.lower_bound 1.原型: 2.说明: 3.官方demo 二.upper_bound 1.原型: 2.说明: 3.官方demo 三.binary_search 1.原型: 2.说明: ...
- 二分查找的循环实现和递归实现
自己实现了二分查找的循环实现和递归实现 说明:二分查找适用于顺序存储结构,不适于链式存储结构,是一个高效的查找方法.虽然折半查找效率高,但是要排序,排序本身是一种很费时的运算. 要求传入的表是 ...
最新文章
- rpmdb open failed 的解决办法
- 中石油《计算机应用基础》,中石油华东《计算机应用基础》2018年秋学期在线作业(一).doc...
- 作为Java初学者,你了解Java的应用范围吗?
- 程序员数学基础【一、基础运算符号(整数、普通浮点数运算、逻辑运算)】(Python版本)
- 39所强基计划试点高校已全部公布招生简章
- P6240 好吃的题目(分治+背包)
- laydate点击输入框闪一下不见了_爱剪辑:如何制作抖音、苹果风格的快闪视频...
- 除了汪峰,还有哪些明星跨界做智能硬件
- 盼达用车:由于公司经营原因 2月1日起暂停运营
- pytorch手动安装开发包
- TNG-Hooks:有状态逻辑在标准函数中的重用和组合
- 贝壳找房的深度学习模型迭代及算法优化
- 北斗导航 | RAIM接收机自主完好性检测(附代码)
- window核心编程 22.3 DIPS.exe的踩坑逻辑梳理
- 虫虫asp建站源码_新云CMS仿完美下载站整站源码
- word 文档密码 html,Word文档密码解决打开方法
- 实例(C++解一元二次方程)
- discuz 获取会员头像
- 华为出击,智能汽车大蝶变
- R语言自学笔记-----数据转换