【题目描述】

一天,小学生 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. python之运算符与基本数据类型

    1.开发工具:IDE pycharm(推荐).eclipse 2.运算符 结果是值 算数运算 a = 10 * 10 赋值运算 a = a + 1    a+=1 结果是布尔值 比较运算 a = 1 ...

  2. checkbox 全选效果

    html部分 <p id="all">全选</p> <input type="checkbox" /><br/> ...

  3. 文件IO流

    //字节流读写含有中文的文本文件会出现问题,我在实践中居然没有检验出该问题,新人小菜,希望大家能指出: import java.io.FileInputStream; import java.io.F ...

  4. pyenv安装

    petalinux-config出错 以为是pyenv的问题,后发现不是,把pyenv的安装卸载总结如下: 折腾了半天发觉是安装了pyenv导致的python版本混乱,卸载后问题解决了.(卸载过程见h ...

  5. Kafka学习笔记之confluent platform入门

    0x00 下载 http://www.confluent.io/download,打开后,显示最新版本3.0.0,然后在右边填写信息后,点击Download下载. 之后跳转到下载页面,选择zip 或者 ...

  6. mariadb的flashback到底怎么样???防误删可以,但算不上真正的闪回--再看mariadb 10.3的System-Versioned Tables

    mariadb 在10.2.4引入闪回特性,支持DML(INSERT, DELETE, UPDATE)操作的闪回,不支持DDL语句,使用闪回,必须设置binlog_row_image=FULL. 其原 ...

  7. redhat6.4 gcc g++ rpm方式安装步骤

    centos源 包包自行下载 [root@localhost gcc]# rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm warning: ppl-0.10.2-11.el ...

  8. Codeforces 438D The Child and Sequence - 线段树

    At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at ...

  9. 学习Struts2的个人疑惑及问题解决

    刚开始学习SSH框架中Struts2时,个人疑惑以及一些问题总结一下. 1.package节点namespace属性值决定访问路径问题       namespace不写或写namespace=&qu ...

  10. python --- 07 补充( join 删除和添加 fromkeys ) 深浅拷贝

    一.基本数据类型补充 1.join() "*".join("马虎疼") # 马*虎*疼 把传递进去的参数进行迭代.  获取到的每个元素和前面的*进行拼接. 得到 ...