CZK 的饮料店
【题目描述】
一天,小学生 cyx 向你请教了一道他不会做的小学数学题,你瞄了一眼题目,发现题目长下面这样。
czk 老板开了个饮料连锁店,连锁店共有 n 家,出售的饮料种类相同。
为了促销,czk 决定让每家连锁店开展赠送活动。具体来说,在第 i 家店,顾客可以用 ai 个饮料瓶兑换到 bi 瓶饮料和 1 个纪念币(注意不足 ai 个饮料瓶则不能兑换)。
一家店可以兑换多次,兑换得到的饮料瓶还可以继续用于兑换。
你买了 s 瓶饮料,想知道用这 s 瓶饮料最多可以兑换到多少个纪念币。
请你帮小学生 cyx 回答这个简单的小学数学题。
【输入格式】
从文件 maths.in 中读入数据。
输入第一行为两个整数 n, s,分别表示连锁店的数量和你买的的饮料瓶数。
接下来 n 行,每行两个整数 ai, bi,描述第 i 家饮料店的赠送活动。
【输出格式】
输出到文件 maths.out 中。
输出一行一个整数,表示小 C 最多能兑换到的纪念币数量。若小 C 能兑换到无限多个纪念币,则输出 -1 。
【输入样例】
3 11
4 1
5 2
8 4
【输出样例】
3
【样例解释】
最多兑换到 3 个纪念币。兑换过程如下:
(1)在第 1 家店用 4 瓶换 1 瓶,此时剩 11-4+1=8 瓶,有 1 个纪念币;
(2)在第 1 家店用 4 瓶换 1 瓶,此时剩 8-4+1=5 瓶,有 2 个纪念币;
(3)在第 2 家店用 5 瓶换 2 瓶,此时剩 5-5+2=2 瓶,有 3 个纪念币;
剩余的饮料瓶无法在任何店兑换,因此最多兑换到 3 个纪念币。
【数据规模及约定】
对于 30%的数据,0 ≤ n ≤ 10,0 ≤ s ≤ 20 ;
对于 50%的数据,0 ≤ n ≤ 1000,0 ≤ s ≤ 100000;
对于 100%的数据,0 ≤ n ≤ 100000,0 ≤ s ≤ 1019,0 ≤ ai ≤ 1019,0 ≤ bi ≤1019 。
【思路】
很明显的可以用贪心来做这道题。
①首先,对于可以无限兑换饮料的情况:如果满足 需要的饮料瓶数不多于获得的饮料瓶数(即 ai ≤ bi),且自己已经拥有的饮料瓶足够兑换( s ≥ ai ) ,就可以直接输出 -1 。
②如果不能无限兑换饮料,就考虑贪心。
可以把每一次的兑换饮料看作是一种损失,大小为 ai - bi 。因为拥有的饮料瓶数量 s 不会增加,为了能够更多次地兑换饮料,需要再能够兑换的范围内将每一次兑换的损失控制得尽量小。
将每一个店的损失( ai - bi )作为第一关键字,每个店的兑换的需求(ai)作为第二关键字,用 sort 从小到大排序。(其中,对于 ai - bi 相等的,则可以按照任意顺序排序)。统计答案。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<cstdlib>
#include<stack>
#include<vector>
#include<queue>
#include<deque>
#include<map>
#include<set>
using namespace std;
typedef unsigned long long ull;
const int maxn=;
struct hh
{
ull a,b;
}t[maxn];
ull n,s;
ull ans,cnt;
inline bool cmp(const hh&x,const hh&y)
{
return x.a-x.b<y.a-y.b||x.a-x.b==y.a-y.b&&x.a<y.a;
}
int main()
{
freopen("maths.in","r",stdin);
freopen("maths.out","w",stdout);
std::cin>>n>>s;
for(ull i=;i<=n;i++)
{
std::cin>>t[i].a>>t[i].b;
}
sort(t+,t+n+,cmp);
for(ull i=;i<=n;i++)
if(t[i].a-t[i].b<= && t[i].a<=s)
{
printf("-1\n");
return ;
}
for(ull i=;i<=n;i++)
{
if(s>=t[i].a)
{
cnt=(s-t[i].a)/(t[i].a-t[i].b)+;
s-=(t[i].a-t[i].b)*cnt;
ans+=cnt;
}
}
std::cout<<ans<<endl;
return ;
}
CZK 的饮料店的更多相关文章
- #WEB安全基础 : HTML/CSS | 0x9美丽的饮料店
我带着你,你带着钱,咱们去喝点饮料吧. 老板久仰你的大名,请你帮忙设计一个网站宣传他的饮料店 你要制定一个完美的方案还需要多学点东西 我先帮你设计一下 这是存放网站的文件夹 这是根目录 这是abo ...
- MySQL存储引擎,优化,事务
1唯一约束unique和主键key的区别? 1.什么是数据的存储引擎? 存储引擎就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数 ...
- R语言各种假设检验实例整理(常用)
一.正态分布参数检验 例1. 某种原件的寿命X(以小时计)服从正态分布N(μ, σ)其中μ, σ2均未知.现测得16只元件的寿命如下: 159 280 101 212 224 379 179 264 ...
- IT智力面试题
◆ 有一个长方形蛋糕,切掉了长方形的一块(大小和位置随意),你怎样才能直直的一刀下去,将剩下的蛋糕切成大小相等的两块? 答案:将完整的蛋糕的中心与被切掉的那块蛋糕的中心连成一条线.这个方法也适用于立方 ...
- #WEB安全基础 : HTML/CSS | 文章索引
本系列讲解WEB安全所需要的HTML和CSS #WEB安全基础 : HTML/CSS | 0x0 我的第一个网页 #WEB安全基础 : HTML/CSS | 0x1初识CSS #WEB安全基础 : H ...
- 从事务隔离级别谈到Hibernate乐观锁,悲观锁
数据库的事务,是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单 ...
- 算法笔记_117:算法集训之结果填空题集一(Java)
目录 1 空瓶换汽水 2 三人年龄 3 考察团组成 4 微生物增殖 5 除去次方数 6 正六面体染色 7 古堡算式 8 海盗比酒量 9 奇怪的比赛 10 土地测量 1 空瓶换汽水 浪费可耻,节约 ...
- 前端PHP入门-034-Session技术-掌握级别
而Session是通过将数据保存在服务器端来实现保持连接的.我们通过一个例子来了解session的机制. 我们去饮料店买饮料,下单以后服务员会给我们一个号码牌,然后你走到一旁,服务员并不认识你是谁,如 ...
- 事务基础知识-->Spring事务管理
Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ...
随机推荐
- mysql 汇总
子查询: select a.id,a.hotelname,max(b.day) as day,a.hotelrankid, c.hotelrank,min(b.basicprice) a ...
- Linux的常用路由配置
1.配置默认路由 ip route add default via 192.168.10.1 dev eth0 route add default gw 192.168.10.1 2.间接路由: ip ...
- 【题解】Luogu SP3267 DQUERY - D-query
原题传送门 这题和Luogu P1972 [SDOI2009]HH的项链很像,只是数据大小有些差别,题解 我博客里对莫队的介绍 我们在排序询问时,普通是这样qaq inline bool cmp(re ...
- python框架相关问题
面试其他篇 目录: 1.1
- Android之xml解析
利用类下载器解析Xml文件要解析的xml文件<?xml version="1.0" encoding="utf-8"?><info> & ...
- Navicat Premium 12.0.18安装与激活(转)
转载:https://www.jianshu.com/p/42a33b0dda9c 一.Navicat Premium 12下载 Navicat Premium 12是一套数据库开发管理工具,支持连接 ...
- VC++ 使用ShellExecute函数调用邮箱客户端发送邮件(可以带附件)
之前写过一篇博文,通过MAPI实现调用邮箱客户端发送邮件带附件,当时对ShellExecute研究不深,以为ShellExecute不能带附件,因为项目需求原因(MAPI只能调用Foxmail和O ...
- hdfoo站点开发笔记-2
httpd的目录的 Options: (里面的单词都是用的复数): Options Indexes FollowSymLinks 为了避免有些目录下没有生成deny.htm而显示列表, 可以直接给 / ...
- php中的正则函数:正则匹配,正则替换,正则分割 所有的操作都不会影响原来的字符串.
有一个长期的误解, 如果要分组, 必须用 小括号 和 |, 而不能用 中括号 和 |. [ab|AB]表示的不是 匹配 ab或 AB, 而是表示 匹配 a,b, |, A, B 这5个字符中 的任意 ...
- php的pear编程: phpDocumentor的使用?
pfc: php基础类库: pecl: php扩展公共库 pear: php extension and application repository. php的扩展和应用库 phar: ['fa:] ...