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的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ...
随机推荐
- BUAA 111 圆有点挤
题目描述 gg最近想给女友送两个精美的小礼品:两个底面半径分别为R1和R2的圆柱形宝石,并想装在一个盒子里送给女友. 好不容易找到了一个长方体的盒子,其底面为A*B的矩形,他感觉好像宝石装不进去,但又 ...
- 自学java第六周的总结
在这个星期里,我主要将以前看过的复习了一遍,并且阅读并做了相关的题. 下个星期继续努力.
- Python进阶【第三篇】Python中的基本数据类型
一.运算符 1.算术运算 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 二.基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1 ...
- MMU工作原理(转)
源: MMU工作原理
- foreve结束
import asyncio from threading import Thread import time print('main start:',time.time()) async def s ...
- centos7 static for django2.1
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...
- awk中截取IP字段
由于文本的特殊性,IP字段可能并不是在特定的字段中. 借助awk的match()函数进行匹配截取 awk --re-interval '($0 ~ "xxx"){match($0, ...
- Docker学习笔记之了解 Docker 的核心组成
0x00 概述 在掌握 Docker 的一些背景知识后,我们还不得不花费一节的篇幅来简单介绍有关 Docker 核心的一些知识.当然,大家不要觉得有“核心”这类的词,我们就要在这一节中深入 Docke ...
- MySQL 常用使用语句
1)批量删除表 Select CONCAT( 'drop table ', table_name, ';' ) FROM information_schema.tables Where table_n ...
- 20145325张梓靖 《网络对抗技术》 PC平台逆向破解
20145325张梓靖 <网络对抗技术> PC平台逆向破解 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并 ...