3120 - 学姐去谷歌

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

学姐要去Google上班了,去之前学姐想再做一道水题,但时间不多了,所以她希望题目做起来既水又快。现在一共有n道题,编号从1到n,每道题有两个值a和b,a为做这道题需要的时间,b为题目的“水值”,学姐希望做b/a最大的那题。

题目输入

输入第一行为数据组数T(T≤10),接下来T组数据,每组数据中第一行为一个数n,n为题目的数量,接下来n行,每行两个正整数a和b。如果两道题b/a的值是一样的就输出a比较小的,如果还一样就输出编号比较靠前的。 1≤a,b≤109,1≤n≤100000)

<br />

题目输出

对于每组数据,输出对应的题目编号,每个输出占一行。

输入/输出样例

输入格式

1
2
3 5
4 8

输出格式

2

C语言解答

#include<stdio.h>
int main()
{
  int T,n[10],i,j,m=0;
  float t[10000],MAX=0,a[10000],b[10000];
  scanf("%d",&T);
  for(i=0;i<T;i++)
  {
     scanf("%d",&n[i]);
     for(j=0;j<n[i];j++)
     {
        scanf("%f %f",&a[j],&b[j]);
         t[j]=b[j]/a[j];
         if(t[j]>MAX)
         {
           MAX=t[j];
           m=j+1;
          }
     }
     printf("%d",m);
  }
  return 0;
}

C++解答

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
struct Num
{
    int a,b,id;
}num[111111];
bool cmp(Num my,Num s)
{
    return my.a==s.a?my.id<s.id:my.a<s.a;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&num[i].a,&num[i].b);
            num[i].id=i;
        }
        Num ans=num[1];
        for(int i=1;i<=n;i++)
        {
            if((num[i].b*1.0/num[i].a)>(ans.b*1.0/ans.a))
            {
                ans=num[i];
            }
            else if((num[i].b*1.0/num[i].a)==(ans.b*1.0/ans.a))
            {
                if(num[i].a<ans.a)
                {
                    ans=num[i];
                }
                else if (num[i].a==ans.a)
                {
                    if(num[i].id<ans.id)
                        ans=num[i];
                }
            }
        }
        printf("%d\n",ans.id);
 
    }
    return 0;
}