心得
排序題的話,複雜度高一點的用sort肯定就TLE了,還得看set呀,上題目
題目
- 丁神去谷歌
時間限制 1000 ms 內存限制 65536 KB
題目描述
丁神要去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≤10^9,1≤n≤100000)
輸出格式
對於每組數據,輸出對應的題目編號,每個輸出佔一行。
輸入樣例
1
2
3 5
4 8
輸出樣例
2
AC代碼
#include <bits/stdc++.h>
using namespace std;
struct Problem{
long long order;
double aa;
double bb;
Problem(long long o,double a,double b):order(o),aa(a),bb(b){}
bool operator <(const Problem& c)const
{
if(bb/aa == c.bb/c.aa&&aa==c.aa) return order<c.order;//這一行不寫也行,set的性質,不寫的話還省了100ms,難道說排序規則越多,複雜度越大???
else if(bb/aa == c.bb/c.aa&&aa!=c.aa) return aa < c.aa;
else return bb/aa > c.bb/c.aa;
}
};
set<Problem>myset;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
myset.clear();
long long n;
scanf("%lld",&n);
for(long long i=1;i<=n;i++)
{
double a,b;
scanf("%lf%lf",&a,&b);
myset.insert(Problem(i,a,b));
}
set<Problem>::iterator it;
for(it=myset.begin();it!=myset.end();it++)
{
printf("%lld\n",(*it).order);
break;
}
}
return 0;
}