• JXJJOI2018_T1_market


    题目描述

    某天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_icdot 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
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    CF11C How Many Squares?
    CF3D Least Cost Bracket Sequence
    P4106 [HEOI2014]逻辑翻译
    吉大第二届青云杯复赛第6题
    2017六省联考部分题目整理【期末考试,寿司餐厅,组合数问题,分手是祝愿】
    CF578D LCS Again
    P5072 [Ynoi2015]盼君勿忘
    P3232 [HNOI2013]游走
    P6154 游走
    P4648 [IOI2007] pairs 动物对数
  • 原文地址:https://www.cnblogs.com/hkpls/p/9828185.html
Copyright © 2020-2023  润新知