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;
}
posted @ 2019-08-01 21:35  幽灵小一只  阅读(382)  评论(0编辑  收藏  举报