博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JXJJOI2018_T1_market
阅读量:7053 次
发布时间:2019-06-28

本文共 1761 字,大约阅读时间需要 5 分钟。

题目描述

某天Lemon去超市买柠檬,他发现货架上有N个柠檬,每个柠檬都有一个重量Wi和价格Ci。

Lemon身上只带了S元钱,因此他想要买一个价格不超过S的柠檬回家,另外,他希望他买的那个柠檬的性价比尽量高。

性价比的定义是重量除以价格,即第i个柠檬的性价比是Wi/Ci。你的任务是告诉Lemon,他应该买第几个柠檬。

输入输出格式

输入格式

输入文件第一行包含两个正整数N,S。

输入文件第2~N+1行,每行包含两个正整数Wi、Ci,第i+1行的数表示第i个柠檬的重量和价格。

输出格式

输输出文件第一行仅包含一个数K,表示购买第K只柠檬能使Lemon在可以接受的价格内获得最高的性价比。题目保证答案唯一。

样例

INPUT

4 15

4 8
4 10
8 10
10000 20

OUTPUT

3

HINT

样例解释 Sample Explanation:

第1只柠檬重量为4,价格为8,性价比为4/8=0.5;
第2只柠檬重量为4,价格为10,性价比为4/10=0.4;
第3只柠檬重量为8,价格为10,性加比为8/10=0.8;
第4只柠檬重量为10000,价格为20,性价比为10000/20=500,但Lemon只带了15元,无法购买这只柠檬。
因此Lemon的最佳选择是第3只柠檬。
数据范围 Data Range:
对于100%的数据,满足:0<n≤100000;0<s≤10^9;0<wi、ci≤10^9;
n,s,w,c均为整数。

SOLUTION

傻蛋坑题。

这题把坑拿掉顶多就是普及-的难度。

如果数据是\(10^9\)的数量级的话就必须考虑一下精度问题,因为我们一般使用的double类型的有效位数为15位,所以考虑简单转化:\[\frac{w_i}{c_i}>\frac{w_{rec}}{c_{rec}}\]等效于\[w_i\cdot c_{rec}>w_{rec}\cdot c_i\]

这样的话就只要改成long long就好了,以乘代除来保证精度的技巧以前也出现过,并没有重视,所以应该是一个比较好的教训了。

#include 
#include
#include
#include
#include
using namespace std;typedef long long LL;inline int read(){ int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9') {x=x*10+ch-48;ch=getchar();} return x*f;}int n,S,ans=0;LL recw=0,recc=0;inline LL gcd(LL x,LL y) {return (!y)?x:gcd(y,x%y);}int main(){ //freopen("market.in","r",stdin); //freopen("market.out","w",stdout); int i,j; n=read();S=read(); for (i=1;i<=n;++i) {LL w=read(),c=read();if (c>S) continue; LL g=gcd(w,c);w/=g;c/=g;if (!ans) {recw=w;recc=c;ans=i;continue;} LL now=w*recc,rec=c*recw;if (now>rec) {recw=w;recc=c;ans=i;} }//直接踩中了这题的雷,直接除的话会爆精度 printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/hkpls/p/9828185.html

你可能感兴趣的文章
FileWriter写数据
查看>>
【Andorid X 项目笔记】TextView字幕效果(3)
查看>>
HDU 1002
查看>>
练习markdown语法
查看>>
python 制作自定义包并安装到系统目录
查看>>
大文件排序问题
查看>>
php实现rar文件的读取和解压
查看>>
2014年天津市第一批科技计划项目
查看>>
@芥末的糖 ---------- node连接数据库两种方式mysql和moogoDB
查看>>
MongoDB 学习笔记2----条件操作符
查看>>
关于Hibernate5.x的那点事
查看>>
sk-learn 选择正确的估算器
查看>>
python操作mysql数据库
查看>>
erp的核心代码,替代orm
查看>>
字符串--manacher算法(回文串匹配)
查看>>
[LeetCode]: 242: Valid Anagram
查看>>
项目机器在开机器的时候做好标签,汉字标注
查看>>
expr判断整数是相加的值,返回命令的返回值$? 是0,但是少数情况是1,例如1 + -1 ,$? 的结果是1 ,判断要大于1最准确...
查看>>
Matplotlib
查看>>
DES 加密----笔记
查看>>