要说的就是题意,给定的公式中 s[ i ] 看做 下标 i 就好,
再要说的就是分析下公式就能知道满足要求的方法是: 时间长度 L 短的, 频率 F 高的 往前放,也就是 L / F 越小越往前放,排序检索就好了
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <set>
#include <stack>
#include <queue>
#include <ctype.h>
#include <vector>
#include <algorithm>
#include <time.h>
// cout << " === " << endl;
using namespace std;
typedef long long ll;
const int maxn = 10000 + 7, INF = 0x3f3f3f3f, mod = 1e9+7;
int n, i;
struct song {
int id, l;
double f;
}a[maxn];
bool cmp(song a, song b) {
return a.l*b.f < a.f*b.l;
}
int main() {
while(scanf("%d", &n) != EOF && n) {
for(int i = 0; i < n; ++i)
scanf("%d %d %lf", &a[i].id, &a[i].l, &a[i].f);
sort(a, a+n, cmp);
scanf("%d", &i);
printf("%d\n", a[i-1].id);
}
return 0;
}