题干:

时间限制:10000ms

单点时限:1000ms

内存限制:256MB

描述

有一种叫作hohahola的饮料,售价是X元一瓶。小Hi非常喜欢这种饮料,但是他现在身无分文。

不过小Hi有N张优惠券,买hohahola时每瓶最多使用一张优惠券,可以使该瓶价格减少Y元。(Y ≤ X)

同时优惠券可以出售,小Hi每出售一张优惠券可以获得Z元。

请你帮小Hi计算通过出售若干优惠券,他最多可以买多少瓶hohahola。

输入

一行4个整数N, X, Y, Z。

1 ≤ N, Z ≤ 1000000000 1 ≤ Y ≤ X ≤ 1000000000

输出

一个整数表示答案

样例输入

100 3 2 1

样例输出

50

解题报告:

不难发现,z>=y的时候,我们把优惠券全都用来换成钱比较好。反之,可以猜测全都用来当做优惠用可以得到最优解。(证明也不难证明但是因为是反之,,所以就可以猜了嘛)

简单说明一下,首先我们知道这题的关键在于优惠券怎么使用。如果换钱,相当于送给我们Z元,如果当成优惠来用,其实也可以想象成送给我们Y元。所以可以认为两个方案是等价的。具体哪种使用,就看这两个值那个大就行了。有了这个结论,check就简单多了。。其实二分的目的有的时候就是把变量,未知量很多的问题转化成带一个定值的,有的时候帮助理清思路。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 2e5 + 5;
ll n,x,y,z;
bool ok(ll t) {//能用来优惠的都用来优惠。ll tmp = min(n,t);return (n-tmp) * z >= tmp*(x-y) + (t-tmp)*x ;
}int main()
{   cin>>n>>x>>y>>z;if(z >= y) {printf("%lld\n",n*z / x);return 0 ;}ll l = 0,r = 1e9;ll mid = (l+r)>>1,ans = 0;while(l<=r) {mid = (l+r)>>1;if(ok(mid)) l = mid+1,ans = mid;else r = mid-1;}cout << ans;return 0 ;}

【hihocoder - offer编程练习赛60 A】hohahola(贪心,二分)相关推荐

  1. 【hihocoder - offer编程练习赛60 B】最大顺子(双指针,思维)

    题干: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 你有N张卡片,每张卡片上写着一个正整数Ai,并且N张卡片上的整数各不相同. 此外,你还有M张百搭卡片,可以当作写着 ...

  2. 【hihocoder - offer编程练习赛60 C】路径包含问题(LCA,树上倍增)

    题干: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵N的节点的树,节点编号1~N,并且1号节点是根节点. 小Hi会反复询问小Ho一个问题:给定两个节点a和b, ...

  3. 【Hihocoder - offer编程练习赛93 套题题解】交错01串(贪心,暴力)方格矩阵高度(模拟)数对(STLmultiset)修整土地(网络流)

    A: 题干: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi要将一个01串S传输给小Ho,由于S非常长,所以小Hi决定用长度为N的2个数组A = [A1, A2, ...

  4. 【Hihocoder - offer编程练习赛86 - C】跳数游戏(STLset或map预处理,dp)

    题干: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个长度为N的数组A1, A2, ... AN,请你判断其中有几个元素Ai按如下跳跃规则能跳到最后一个元素AN ...

  5. 【Hihocoder - offer编程练习赛39 - D】前缀后缀查询(后缀字典树,哈希,思维)

    题干: 时间限制:10000ms 单点时限:1000ms 内存限制:512MB 描述 给定一个包含N个单词的字典:{W1, W2, W3, ... WN},其中第i个单词Wi有具有一个权值Vi. 现在 ...

  6. *【Hihocoder - offer编程练习赛94 - A】最短管道距离(中位数)

    题干: 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在一张2D地图上有N座城市,坐标依次是(X1, Y1), (X2, Y2), ... (XN, YN). 现在H国 ...

  7. hiho 1615 矩阵游戏II [Offer收割]编程练习赛33 Problem A 贪心暴力

    把每列取反后所能获得的收益记录下来,然后排序,从高到低一对对的取,大于0就算上. #include <iostream> #include <stdio.h> #include ...

  8. 最简真分数c语言,HihoCoder1655 : 第K小最简真分数([Offer收割]编程练习赛39)(唯一分解+容斥定理+二分)(不错的数学题)...

    描述 给一个整数N,请你求出以N为分母的最简(既约)真分数中第K小的是多少? 输入 两个整数N个K. 对于30%的数据,1 <= N <= 1000000 对于100%的数据,1 < ...

  9. 牛客网剑指offer编程实践1-10题

    牛客网剑指offer编程实践1-10题 1.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这 ...

最新文章

  1. XSS漏洞自动化攻击工具XSSer
  2. 春节快乐!iPhone11 128G抱回家!
  3. 十、开始进入PowerBI的世界
  4. 0100-Same Tree(相同的树)
  5. php的通用变量,认识并使用PHP的全局变量
  6. Angular jasmine单元测试框架里使用it函数定义single spec
  7. 【JS 逆向百例】反混淆入门,某鹏教育 JS 混淆还原
  8. Arduino笔记-温度传感器的使用
  9. 信息学奥赛一本通 1120:同行列对角线的格 | OpenJudge NOI 1.8 02:同行列对角线的格子
  10. mysql gis index 索引原理_从原理到优化,深入浅出数据库索引
  11. vlf 用法_什么是SQL虚拟日志文件(又名SQL Server VLF)?
  12. 单利计算与复利计算程序
  13. FPGA之道(6)软件编程思路与FPGA编程思路的变革
  14. 解决lightdm启动时黑屏的问题
  15. shell 编程三剑客之三:awk 详解
  16. 线性变换及其对应的矩阵
  17. GiantPandaCV 2021年度总结
  18. starGAN复现及遇到问题
  19. 数据分析---论文数据统计
  20. Mac系统快速上手教学

热门文章

  1. 公司间交易学习笔记---概述
  2. [dp] LeetCode 91. Decode Ways
  3. [Leedcode][JAVA][第572题][另一个树的子树]
  4. div覆盖div DIV相互重叠如何解决
  5. 1245C. Constanze‘s Machine
  6. python函数拟合编程_Python应用实现双指数函数及拟合代码实例
  7. android 设置线程优先级
  8. cmd cd 无法切换目录_一分钟掌握cmd基础操作,告别鼠标
  9. c int转char数组_C语言 指向数组和字符串的指针
  10. BAT批处理中的字符串处理