题目描述
在推翻了暴虐的农夫 John
的统治之后,奶牛们要进行他们的第一次选举,Bessie
是 N(1 ≤ N ≤ 50,000)
头竞选总统的奶牛之一。在选举正式开始之前,Bessie
想知道谁最有可能赢得选举。 选举分两轮进行。在第一轮中,得票最多的 K
头奶牛 (1 ≤ K ≤ N)
进入第二轮。在第二轮选举中,得票最多的奶牛当选总统。 本题给出在第一轮中预期奶牛 i
获得 Ai
票 (1 ≤ Ai ≤ 1,000,000,000)
,在第二轮获得 Bi
票 (1 ≤ Bi ≤ 1,000,000,000)
(如果它成功的话),请您确定哪一头奶牛有望赢得选举。幸运的是,在 Ai
列表中没有一张选票会出现两次;同样地,在 Bi
列表中也没有一张选票会出现两次。
输入输出格式
输入格式 第 1
行,两个空格分隔的整数 N
和 K
; 第 2..N+1
行:第 i+1
行包含两个空格分隔的整数:Ai
和 Bi
。
输出格式 第1
行:预期赢得选举的奶牛的下标。
输入输出样例1
输入
5 3
3 10
9 2
5 6
8 4
6 5
输出 5
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX=50010;
int n,k;
struct node{
int a; //第一轮预期得票
int b; //第二轮预期得票
int num; //奶牛的编号
}cow[MAX]; //结构体数组表示n头奶牛
int cmpa(node p,node q)
{ //先按a从大到小排序,若a相等则按b从大到小排序
if(p.a==q.a)return p.b>q.b;
return p.a>q.a;
}
int cmpb(node p,node q) //先按b从大到小排序,若b相等则按a从大到小排序
{
if(p.b==q.b)return p.a>q.a;
return p.b>q.b;
}
int main(){
int i;
while(scanf("%d%d",&n,&k)!=EOF)
{
for(i=0;i<n;++i)
{
scanf("%d%d",&cow[i].a,&cow[i].b);
cow[i].num=i+1; //奶牛的编号
}
sort(cow,cow+n,cmpa); //第一次排序,n头奶牛的第一轮得票排序
sort(cow,cow+k,cmpb); //第二次排序管第一次排序的前k头奶牛的第二轮得票排序
printf("%d\n",cow[0].num); //输出赢得选举的奶牛的编号
}
}