[2009年NOIP普及组] 分数线划定

[2009年NOIP普及组] 分数线划定

思路:用结构体记录选手的具体信息,用sort()函数降序排序。按照公式算出分数线,循环找出过线的人,同时用计数器记录,输出分数线和过线总人数。最后循环根据笔试成绩降序输出过线人的具体信息。

代码如下:

#include<iostream>

#include<algorithm>

using namespace std;

 

struct node{//存个人信息

      int x;//报名号

      int y;//笔试成绩

};

node a[5005];

 

bool comp(const struct node a,const struct node b)

{

      if(a.y==b.y)//成绩相同时,报名号小的在前

       return a.x<b.x;

      else

       return a.y>b.y;//降序排列

}

 

int main()

{

      int n,m;

      cin>>n>>m;

      for(int i=1;i<=n;i++)

         cin>>a[i].x>>a[i].y;

      sort(a+1,a+n+1,comp);//降序排序

      int l;//分数线

      l=a[int(m*1.5)].y;

      int c=0;//计数器,记录过线人数

      for(int i=1;i<=n;i++)

      {

           if(a[i].y>=l)

            c++;

           }

      cout<<l<<" "<<c<<endl;

      for(int i=1;i<=c;i++)//按题意输出过线人信息

      {

           if(a[i].y>=l)

            cout<<a[i].x<<" "<<a[i].y<<endl;

           }   

      return 0;

}

posted @ 2022-08-13 17:16  shanyingrui  阅读(203)  评论(0编辑  收藏  举报