P1068 分数线划定
P1068 分数线划定
题目链接:https://www.luogu.org/problem/P1068
思路:
该题可以使用结构体加sort排序。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef struct pri//结构体
{
int k;
int s;
}pri;
pri a[10000];
bool cmp(pri a,pri b)
{
if(a.s==b.s){
return a.k < b.k;//如果分数一样就输出最小的报名号;
}else{
return a.s>b.s;//如果分数不一样就输出最大的分数;
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,m,i;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++){
scanf("%d %d",&a[i].k,&a[i].s);//输入报名号和分数;
}
sort(a,a+n,cmp);//进行排序;
int t;
if(m%2==0){ //得到m*1.5的向下取整数;
t = (m/2)*3;
}else{
t = (m-1)/2*3+1;
}
int l = t;
for(i=t;i<n;i++){ //如果后面有相同分数的人也算进入面试,获得最终面试人数;
if(a[t-1].s==a[i].s){
l++;
}else{
break;
}
}
printf("%d %d\n",a[t-1].s,l);
for(i=0;i<t;i++){ //输入t个人的报名号和分数;
printf("%d %d\n",a[i].k,a[i].s);
}
for(i=t;i<n;i++){ //如果有并列也输出并列的报名号和分数;
if(a[t-1].s==a[i].s){
printf("%d %d\n",a[i].k,a[i].s);
}else{
break;
}
}
return 0;
}