3120 - 学姐去谷歌
学姐要去Google上班了,去之前学姐想再做一道水题,但时间不多了,所以她希望题目做起来既水又快。现在一共有n道题,编号从1到n,每道题有两个值a和b,a为做这道题需要的时间,b为题目的“水值”,学姐希望做b/a最大的那题。
Input
输入第一行为数据组数T(T≤10),接下来T组数据,每组数据中第一行为一个数n,n为题目的数量,接下来n行,每行两个正整数a和b。如果两道题b/a的值是一样的就输出a比较小的,如果还一样就输出编号比较靠前的。 1≤a,b≤109,1≤n≤100000)
<br />
Output
对于每组数据,输出对应的题目编号,每个输出占一行。
Examples
Input
1 2 3 5 4 8
Output
2
Solution 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; }
Solution 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; }