BOJ 416. 丁神去谷歌

来源:互联网 发布:windows清理助手怎么样 编辑:程序博客网 时间:2024/06/01 21:27

题意:有n道题,每道题有两个值a,b,我希望做b/a最大的题。如果有两个题b/a相同,选择a最小的。输出题目的序号

思路:模拟就行了,注意要对比值的大小判断最好写一个判断函数。或者将除法化成乘法。

代码如下:

#include <bits/stdc++.h> using namespace std; const double EPS  = 1e-8; int dcmp(double x){    if(fabs(x) < EPS)        return 0;    else if(x > 0)        return 1;    else        return -1;} int main(void){    int T;    scanf("%d", &T);    while(T--){        int res = 0;        int resa = 0;        double q = 0;        int n;        scanf("%d", &n);        for(int i = 1; i <= n; ++i){            int a,b;            scanf("%d %d", &a,&b);            double tmp =(double) b / a;            int j = dcmp(tmp - q);            if(j == 1){                res = i;                resa = a;                q = tmp;            }            else if(j == 0){                if(resa > a){                    res = i;                    resa = a;                }            }        }        printf("%d\n",res);    }    return 0;}

0 0