JXJJOI2018_T1_market

news/2024/7/7 18:49:29

题目描述

某天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 <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
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


http://lihuaxi.xjx100.cn/news/245766.html

相关文章

【转】ubuntu 12.04 下 Vim 插件 YouCompleteMe 的安装

原文网址&#xff1a;http://www.cnblogs.com/jostree/p/4137402.html 作者&#xff1a;jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4137402.html 1.需要保证vim的版本大于7.3.584&#xff0c;否则的话需要更新vim 可以通过第三方源更新&#xff1a; 在终端输入…

You Only Learn One Representation: Unified Network for Multiple Tasks

You Only Learn One Representation: Unified Network for Multiple Tasks一、引言&#xff08;一&#xff09;、 Explicit deep learning&#xff08;二&#xff09;、Implicit deep learning&#xff08;三&#xff09;、Knowledge modeling(四)、Kernel space alignment二、…

思科三层交换机配置命令

Enable //进入私有模式Configure terminal //进入全局模式service password-encryption //对密码进行加密hostname Catalyst 3550-12T1 //给三层交换机定义名称enable password 123456. //enable密码Enable secret 654321 …

jdbc mysql select_java连接mysql数据库并使用jdbc进行查询详解

public Connection getCon() {//数据库连接名称String username"root";//数据库连接密码String password"";String driver"com.mysql.jdbc.Driver";//其中test为数据库名称String url"jdbc:mysql://localhost:3306/test";Connection c…

Linux查看进程线程个数

1.根据进程号进行查询&#xff1a; # pstree -p 进程号 # top -Hp 进程号 2.根据进程名字进行查询&#xff1a; # pstree -p ps -e | grep server | awk {print $1} # pstree -p ps -e | grep server | awk {print $1} | wc -l 这里利用了管道和命令替换&#xff0c; 关于命令替…

JavaScript 条件语句

条件语句用于基于不同的条件来执行不同的动作。 条件语句 通常在写代码时&#xff0c;您总是需要为不同的决定来执行不同的动作。您可以在代码中使用条件语句来完成该任务。 在 JavaScript 中&#xff0c;我们可使用以下条件语句&#xff1a; if 语句 - 只有当指定条件为 true …

SCOM电子书

SCOM电子书介绍转载于:https://blog.51cto.com/286722/1599625

vscode 搜索结果 整行_如何用VSCode愉快的写Python

在学习Python的过程中&#xff0c;一直没有找到比较趁手的第三方编辑器&#xff0c;用的最多的还是Python自带的编辑器。由于本人用惯了宇宙第一IDE(Visual Studio)&#xff0c;所以当Visual Studio Code出现时&#xff0c;心情有点小激动呢。从我的使用经验出发&#xff0c;可…