[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;
}