#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int arr[5001]={0},ass[5001]={0};//全局数组,存储成绩与代号

int compare(const void* a,const void* b)
{
    int ia=*(const int*)a;
    int ib=*(const int*)b;
    if(ass[ia]!=ass[ib]){
        //按成绩递减排序
        return ass[ib]-ass[ia];
    }else {
        //成绩相同时,按报名号递增排序
        return arr[ia]-arr[ib];
    }
}

int main(int argc,char *argv[])
{
    int i,n,m,cnt=0;
    scanf("%d %d",&n,&m);
//C语言库中用"floor"来表示取整
    int t=floor(1.5*m);
    for(i=0;i<n;i++){
        scanf("%d %d",&arr[i],&ass[i]);
    }
//用索引数组index[i]=i(原数组下标),这样保证arr与ass同步排序变化
    int index[5001]={0};
    for(i=0;i<n;i++){
        index[i]=i;
    }
    qsort(index,n,sizeof(int),compare);
//面试分数线:第t名选手成绩,数组下标为t-1
    int min=ass[index[t-1]];
    for(i=0;i<n;i++){
        if(ass[index[i]]>=min){
            cnt++;
        }
    }
    printf("%d %d\n",min,cnt);
    for(i=0;i<cnt;i++){
        printf("%d %d\n",arr[index[i]],ass[index[i]]);
    }
    return 0;
}

有点完蛋了,我竟没有想到用创建独立索引的方式来实现对成绩与报名号的同步排序,白白浪费了很多时间