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

题目大意:略。。。

这个题目的难点在于是先按分数排序还是编号,只要搞懂了这个就行了。

代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
struct na{
int name;
int che;
}a[5005];
int n,m,l,minn,b;
void work()
{
cin>>n>>m; //输入
for(int i=1;i<=n;i++)
cin>>a[i].name>>a[i].che;
for(int i=1;i<=n;i++) //冒泡
for(int j=1;j<n-i+1;j++)
if(a[j].che<a[j+1].che) //成绩从大到小
swap(a[j],a[j+1]);
for(int i=1;i<=n;i++) //冒泡
for(int j=1;j<n-i+1;j++)
if(a[j].che==a[j+1].che&&a[j].name>a[j+1].name) //成绩相同,编号从小到大
swap(a[j],a[j+1]);
b=floor(m*1.5);
minn=a[b].che; //分数线
for(int i=1;i<=n;i++)
if(a[i].che>=minn) l++; //过线人数
cout<<minn<<" "<<l<<endl; //输出
for(int i=1;i<=l;i++)
cout<<a[i].name<<" "<<a[i].che<<endl;
}
int main() //主程序
{
work();
return 0;
}