【题目描述】

一天,小学生 cyx 向你请教了一道他不会做的小学数学题,你瞄了一眼题目,发现题目长下面这样。

czk 老板开了个饮料连锁店,连锁店共有 n 家,出售的饮料种类相同。

为了促销,czk 决定让每家连锁店开展赠送活动。具体来说,在第 i 家店,顾客可以用 a个饮料瓶兑换到 b瓶饮料和 1 个纪念币(注意不足 a个饮料瓶则不能兑换)。

一家店可以兑换多次,兑换得到的饮料瓶还可以继续用于兑换。

你买了 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 ≤ a≤ 1019,0 ≤ b≤1019 。


【思路】

很明显的可以用贪心来做这道题。

①首先,对于可以无限兑换饮料的情况:如果满足 需要的饮料瓶数不多于获得的饮料瓶数(即 ai ≤ bi),且自己已经拥有的饮料瓶足够兑换( s ≥ a) ,就可以直接输出 -1 。

②如果不能无限兑换饮料,就考虑贪心。

可以把每一次的兑换饮料看作是一种损失,大小为 ai - b。因为拥有的饮料瓶数量 s 不会增加,为了能够更多次地兑换饮料,需要再能够兑换的范围内将每一次兑换的损失控制得尽量小。

将每一个店的损失( ai - b)作为第一关键字,每个店的兑换的需求(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 的饮料店的更多相关文章

  1. #WEB安全基础 : HTML/CSS | 0x9美丽的饮料店

    我带着你,你带着钱,咱们去喝点饮料吧. 老板久仰你的大名,请你帮忙设计一个网站宣传他的饮料店 你要制定一个完美的方案还需要多学点东西 我先帮你设计一下 这是存放网站的文件夹 这是根目录   这是abo ...

  2. MySQL存储引擎,优化,事务

    1唯一约束unique和主键key的区别?     1.什么是数据的存储引擎?       存储引擎就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数 ...

  3. R语言各种假设检验实例整理(常用)

    一.正态分布参数检验 例1. 某种原件的寿命X(以小时计)服从正态分布N(μ, σ)其中μ, σ2均未知.现测得16只元件的寿命如下: 159 280 101 212 224 379 179 264  ...

  4. IT智力面试题

    ◆ 有一个长方形蛋糕,切掉了长方形的一块(大小和位置随意),你怎样才能直直的一刀下去,将剩下的蛋糕切成大小相等的两块? 答案:将完整的蛋糕的中心与被切掉的那块蛋糕的中心连成一条线.这个方法也适用于立方 ...

  5. #WEB安全基础 : HTML/CSS | 文章索引

    本系列讲解WEB安全所需要的HTML和CSS #WEB安全基础 : HTML/CSS | 0x0 我的第一个网页 #WEB安全基础 : HTML/CSS | 0x1初识CSS #WEB安全基础 : H ...

  6. 从事务隔离级别谈到Hibernate乐观锁,悲观锁

    数据库的事务,是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源.通过将一组相关操作组合为一个要么全部成功要么全部失败的单 ...

  7. 算法笔记_117:算法集训之结果填空题集一(Java)

     目录 1 空瓶换汽水 2 三人年龄 3 考察团组成 4 微生物增殖 5 除去次方数 6 正六面体染色 7 古堡算式 8 海盗比酒量 9 奇怪的比赛 10 土地测量   1 空瓶换汽水 浪费可耻,节约 ...

  8. 前端PHP入门-034-Session技术-掌握级别

    而Session是通过将数据保存在服务器端来实现保持连接的.我们通过一个例子来了解session的机制. 我们去饮料店买饮料,下单以后服务员会给我们一个号码牌,然后你走到一旁,服务员并不认识你是谁,如 ...

  9. 事务基础知识-->Spring事务管理

    Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ...

随机推荐

  1. mysql 汇总

    子查询:    select   a.id,a.hotelname,max(b.day) as day,a.hotelrankid,   c.hotelrank,min(b.basicprice) a ...

  2. Linux的常用路由配置

    1.配置默认路由 ip route add default via 192.168.10.1 dev eth0 route add default gw 192.168.10.1 2.间接路由: ip ...

  3. 【题解】Luogu SP3267 DQUERY - D-query

    原题传送门 这题和Luogu P1972 [SDOI2009]HH的项链很像,只是数据大小有些差别,题解 我博客里对莫队的介绍 我们在排序询问时,普通是这样qaq inline bool cmp(re ...

  4. python框架相关问题

    面试其他篇 目录: 1.1

  5. Android之xml解析

    利用类下载器解析Xml文件要解析的xml文件<?xml version="1.0" encoding="utf-8"?><info> & ...

  6. Navicat Premium 12.0.18安装与激活(转)

    转载:https://www.jianshu.com/p/42a33b0dda9c 一.Navicat Premium 12下载 Navicat Premium 12是一套数据库开发管理工具,支持连接 ...

  7. VC++ 使用ShellExecute函数调用邮箱客户端发送邮件(可以带附件)

      之前写过一篇博文,通过MAPI实现调用邮箱客户端发送邮件带附件,当时对ShellExecute研究不深,以为ShellExecute不能带附件,因为项目需求原因(MAPI只能调用Foxmail和O ...

  8. hdfoo站点开发笔记-2

    httpd的目录的 Options: (里面的单词都是用的复数): Options Indexes FollowSymLinks 为了避免有些目录下没有生成deny.htm而显示列表, 可以直接给 / ...

  9. php中的正则函数:正则匹配,正则替换,正则分割 所有的操作都不会影响原来的字符串.

    有一个长期的误解, 如果要分组, 必须用 小括号 和 |, 而不能用 中括号 和 |. [ab|AB]表示的不是 匹配 ab或 AB, 而是表示 匹配 a,b, |, A, B 这5个字符中 的任意 ...

  10. php的pear编程: phpDocumentor的使用?

    pfc: php基础类库: pecl: php扩展公共库 pear: php extension and application repository. php的扩展和应用库 phar: ['fa:] ...