DTOJ 2825: 赛车比赛(race)
程序员文章站
2022-03-01 23:18:09
...
2825: 赛车比赛(race)
时间限制: 内存限制:
题目描述
自己做了一辆卡丁车去参加赛事,经过了一轮预选赛,还剩下名选手进入决赛。
由于各选手的预赛成绩不同,所以各选手的出发点也是根据成绩而定的,有些人的出发点不同,有些人出发点相同。每位选手根据状态还有一个保持不变的速度。为了简化问题,设跑道为一条数轴,选手的坐标即为其通过距离。
排名方法如下,如果一辆车在另一辆车前面,则这辆车在另一辆车前。如果两车的通过距离相同,则编号小的在前。
的卡丁车是世界一流的,他不用担心当不了第一名。他现在想知道,第时刻排在第位的是那辆车。
输入
第一行,包含一个正整数。
第~行,第行包括两个正整数。
第行,包含一个正整数。
第~行,每行表示一个询问,包括两个正整数t,k。
输出
输出包括行,每行表示每个询问时刻排在第位的选手编号。
样例输入
4
2 100
3 50
4 60
5 1
4
1 1
50 2
60 4
100 1
样例输出
1
4
1
4
提示
【数据规模与约定】
对于的数据:
另有的数据:
对于的数据:
题解:
emmmmmm。。。。。网上有一种炒鸡强的写法,叫做冒泡排序,但是我不会。。。。
于是,万能的 助我切掉这题,赐予了我一个工具,叫
对于每个询问,先找到前大的放前面,再找到前的放前面,就好了。
#include<bits/stdc++.h>
using namespace std;
#define in inline
#define re register
#define rep(i,a,b) for(re int i=a;i<=b;i++)
#define _(d) while(d(isdigit(ch=getchar())))
template<class T>in void g(T&t){T x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch-48;_()x=x*10+ch-48;t=f*x;}
typedef long long ll;
const int N=7004;
int n,m;
struct A{ll v,s,d,id;}a[N];
in bool cmp(A x,A y){return x.d>y.d||(x.d==y.d&&x.id<y.id);}
int main(){
g(n);
rep(i,1,n) g(a[i].v),g(a[i].s),a[i].id=i;
g(m);
rep(i,1,m){
ll t,k;g(t),g(k);
rep(j,1,n) a[j].d=a[j].v*t+a[j].s;
nth_element(a+1,a+1+k,a+1+n,cmp);
nth_element(a+1,a+k,a+1+k,cmp);
printf("%lld\n",a[k].id);
}
return 0;
}
上一篇: Vector-assign
下一篇: SGISTL源码阅读四 对象的构造与析构