洛谷:P1068
OJ:P4229
熟练掌握结构体排序
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /**************************************************************** * Description: 2009年普及组复赛第二题 分数线划定 * Author: Alex Li * Date: 2024-10-19 03:36:59 * LastEditTime: 2024-10-19 04:27:24 ****************************************************************/ #include<iostream> #include<cmath>//向下取整floor函数的库 #include<algorithm>//排序函数sort的库 struct fc{ int num;//编号 int score;//成绩 }a[5010]; //如果成绩一样,就判断编号大小。小者在前,大者在后。 int cmp (fc n,fc m){ if (n.score==m.score) return n.num<m.num; return n.score>m.score;//从大到小排序 } using namespace std; int main(){ int n,m,lq; cin>>n>>m; lq=floor(m*1.50);//向下取整,需要强转 for (int i=1;i<=n;++i) cin>>a[i].num>>a[i].score; sort(a+1,a+n+1,cmp);//排序 cout<<a[lq].score<<" ";//先输出面试分数线 int i=lq; //从被定为分数线的那个人开始,往下搜索是否还有与分数线并列的人,如果有,i++。但不直接输出。 while (a[i].score==a[i+1].score&&i<=n) i++; cout<<i<<endl;//为保证格式,先输出被录取人数 for (int j=1;j<=i;++j) cout<<a[j].num<<" "<<a[j].score<<endl;//在输出被录取人的编号和成绩 return 0; } |