欢迎光临
我们一直在努力

【题解-信息学奥赛一本通】1176:谁考了第k名

题目:1176:谁考了第k名

题目描述:

在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。

输入:

第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。

其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。

输出:

输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)

时空限制

1s / 64 MB

样例输入:

5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9

样例输出:

90788004 68.4

代码1

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,double> PII;
const int N=100+10;
PII a[N];
int n,k;
int quick_sort(int l,int r,int k){
if(l==r) return l;
double x=a[(l+r)/2].second;
int i=l1,j=r+1;
while(i<j){
do i++;while(a[i].second>x);
do j;while(a[j].second<x);
if(i<j) swap(a[i],a[j]);
}
int sl=jl+1;
if(k<=sl) return quick_sort(l,j,k);
return quick_sort(j+1,r,ksl);
}
int main(){
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++) scanf("%d %lf",&a[i].first,&a[i].second);
int res=quick_sort(0,n1,k);
printf("%d %g",a[res].first,a[res].second);
return 0;
}

代码2

#include<bits/stdc++.h>
using namespace std;
typedef pair<int,double> PII;
const int N=100+10;
PII a[N];
int n,k;
int quick_sort(int l,int r,int k){
if(l==r) return l;
double x=a[(l+r)/2].second;
int i=l1,j=r+1;
while(i<j){
while(a[++i].second>x);
while(a[j].second<x);
if(i<j) swap(a[i],a[j]);
}
int sl=jl+1;
if(k<=sl) return quick_sort(l,j,k);
return quick_sort(j+1,r,ksl);
}
int main(){
scanf("%d %d",&n,&k);
for(int i=0;i<n;i++) scanf("%d %lf",&a[i].first,&a[i].second);
int res=quick_sort(0,n1,k);
printf("%d %g",a[res].first,a[res].second);
return 0;
}

结果

在这里插入图片描述

赞(0)
未经允许不得转载:171主机测评 » 【题解-信息学奥赛一本通】1176:谁考了第k名
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址