【题目描述】

一天,小学生 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. Kattis之旅——Chinese Remainder

    Input The first line of input consists of an integers T where 1≤T≤1000, the number of test cases. Th ...

  2. sqlalchemy 和 django 插入操作后自动返回自增ID

    result = session.execute('insert into ***') session.commit() last_insert_id = result.lastrowid 注意:如果 ...

  3. Linux学习笔记之yum安装和卸载软件

    # yum -y install 包名(支持*) :自动选择y,全自动 # yum install 包名(支持*) :手动选择y or n # yum remove 包名(不支持*) # rpm -i ...

  4. php中session同ip不同端口的多个网站session冲突的解决办法

    在局域网内使用IP加端口的访问方式搭了两个相同程序的站,结果发现用户在一个站下登录后,在另一个站也同时登录了,在一个退出后,另一个站也同时退出了.看了下程序发现两个站都是使用纯session方式记录登 ...

  5. git小技巧--如何从其他分支merge个别文件或文件夹

    在实际工作中,一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,进行分别开发. 创建分支 功能分为2个分支,分别为A.B. A上面有个列表页功能 B上面有个详情 ...

  6. 模拟window系统的“回收站”

    若要模拟window系统的“回收站”功能,具体的要求如下: 对于列表中的图片,可以通过拖动或单击“删除”的链接,以动画的方式移至“回收站”. 对于“回收站的图片”,可以通过拖动和单击“还原”的链接,以 ...

  7. Python3 自定义请求头消息headers

    Python3 自定义请求头消息headers 使用python爬虫爬取数据的时候,经常会遇到一些网站的反爬虫措施,一般就是针对于headers中的User-Agent,如果没有对headers进行设 ...

  8. python简说(六)判断

    非空即真,非0即真True '1' [1] {k-v}False '' None [] {}

  9. 18种CSS3loading效果完整版

    今天把之前分享的两篇博客<CSS3实现10种Loading效果>和 <CSS3实现8种Loading效果[二]>整理了一下.因为之前所分享的各种loading效果都只是做了we ...

  10. 【python010-数组】

    1.创建列表 *创建普通列表 >>> member = ['尘封','破冰','python']>>> member['尘封', '破冰', 'python'] * ...