7.14.3 Election Time

题目描述

在推翻了暴虐的农夫 John 的统治之后,奶牛们要进行他们的第一次选举,BessieN(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 行,两个空格分隔的整数 NK ; 第 2..N+1 行:第 i+1 行包含两个空格分隔的整数:AiBi

输出格式1 行:预期赢得选举的奶牛的下标。

输入输出样例1

输入

 
  1. 5 3
  2. 3 10
  3. 9 2
  4. 5 6
  5. 8 4
  6. 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);     //输出赢得选举的奶牛的编号
     }
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值