题解 P1068 【分数线划定】
比较简单的一道题吧,首先就是输入了。主要思路就是先将分数排序(同时将报名号排序),然后用floor函数向下取整,a储存分数线,最后循环用b累计并输出。
其实可以直接定义一个结构体,用sort排序方便一些,不过冒泡排序并不会超时,为了方便看懂,所以就没有改。
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main()
{
int n,m,num[10000],sco[10000],a,b=0,i,j;
cin>>n>>m;
for(i=0;i<n;i++)
cin>>num[i]>>sco[i];
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
{
if(sco[i]<sco[j])
{
swap(sco[i],sco[j]);
swap(num[i],num[j]);
}
else if(sco[i]==sco[j])
{
if(num[j]<num[i])
swap(num[j],num[i]);
}
}
m=floor(1.5*m);
a=sco[m-1];
for(i=0;i<n;i++)
{
if(sco[i]>=a)
b++;
else
break;
}
cout<<a<<" "<<b<<endl;
for(i=0;i<b;i++)
cout<<num[i]<<" "<<sco[i]<<endl;
return 0;
}