题解 P1068 【分数线划定】
看着题解没有人用结构体,其实结构体都简单的,所以决定第二次发题解,大佬勿喷。。。。。。。。。。
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
struct student
{
int number;
int point;
}a[100001];
bool cmp(student a,student b)
{
if(a.point==b.point) return a.number<b.number;
else
return a.point>b.point;
}//对结构体进行排序的方法
int main()
{
int m,n,k;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d %d",&a[i].number,&a[i].point);
k=floor(float(m)*1.5);
sort(a+1,a+n+1,cmp);
//for(int i=1;i<=n;i++)
//printf("%d %d\n",a[i].point,a[i].number);
//printf("%d",k);
int z=k;int j=1;int point;int o;
int sum=0;
while(z>0)
{
point=a[j].point;
//printf("%d %d\n",a[j].number,a[j].point);
j++;
sum++;
z--;
if(z==0)
{
o=point;
}
while(a[j].point==point)
{
//printf("%d %d\n",a[j].number,a[j].point);
j++;
sum++;
z--;
if(z==0)
o=point;
}
}//求出分数线和实际人数
printf("%d %d\n",o,sum);
z=k;j=1;
while(z>0)
{
point=a[j].point;
printf("%d %d\n",a[j].number,a[j].point);
j++;
z--;
while(a[j].point==point)
{
printf("%d %d\n",a[j].number,a[j].point);
j++;
z--;
}
}//将人和分数都输出来
return 0;
}