华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1435|回复: 4
打印 上一主题 下一主题

P1068 分数线划定

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
楼主
发表于 2018-5-11 17:20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://www.luogu.org/problemnew/show/P1068

题目描述
世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对

所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根

据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%

(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有

选手。

现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成

绩。

输入输出格式
输入格式:
第一行,两个整数 n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其

中 n 表示报名参加笔试的选手总数,m 表示计划录取的志愿者人数。输入数据保证 m*150%

向下取整后小于等于 n。

第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号 k

(1000 ≤ k ≤ 9999)和该选手的笔试成绩 s(1 ≤ s ≤ 100)。数据保证选手的报名号各

不相同。

输出格式:
第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为

进入面试的选手的实际人数。

从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手

的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的

顺序输出。

输入输出样例
输入样例#1:
6 3
1000 90
3239 88
2390 95
7231 84
1005 95
1001 88
输出样例#1:
88 5
1005 95
2390 95
1000 90
1001 88
3239 88
说明
【样例说明】

m*150% = 3*150% = 4.5,向下取整后为 4。保证 4 个人进入面试的分数线为 88,但因为 88

有重分,所以所有成绩大于等于 88 的选手都可以进入面试,故最终有 5 个人进入面试。

NOIP 2009 普及组 第二题
回复

使用道具 举报

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
沙发
 楼主| 发表于 2018-6-15 20:21:08 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. const int mn=5050; ///最大5000个人
  4. int n,m,k[mn],s[mn];
  5. int score,total;///分数 人数
  6. int i,j,x,maxx,maxk,temp;  ///主要排序用
  7. void run()
  8. {
  9.      int mm=m*1.5;  ///1.5倍 下取整
  10.      for (i=1;i<=n-1;i++)  ///多关键字排序
  11.      {
  12.          maxx=s[i];x=i;maxk=k[i];
  13.          for (j=i+1;j<=n;j++)
  14.          if ((s[j]>maxx)||(s[j]==maxx && k[j]<maxk))
  15.             {maxx=s[j];x=j;maxk=k[j];}
  16.          swap(s[i],s[x]);
  17.          swap(k[i],k[x]);
  18.      }
  19.      score=s[mm];
  20.      for (i=1;i<=n;i++)
  21.         if (s[i]>=score) total++;
  22. }
  23. int main()
  24. {
  25.     cin>>n>>m;  ///输入
  26.     for (i=1;i<=n;i++)
  27.         cin>>k[i]>>s[i];
  28.     run(); ///处理
  29.     ///输出
  30.     cout<<score<<' '<<total<<endl;
  31.     for (i=1;i<=total;i++)
  32.       cout<<k[i]<<' '<<s[i]<<endl;
  33.     return 0;

  34. }
复制代码
回复 支持 反对

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
板凳
发表于 2018-7-18 14:47:55 | 只看该作者
  1. #include<iostream>
  2. #include<cmath>
  3. #include<algorithm>
  4. #include<cstdio>
  5. using namespace std;
  6. int n,line;
  7. double m;
  8. int i,j,k;
  9. struct people
  10. {
  11.         int num,gra;
  12. }p[5050];
  13. bool cmp(people x,people y)
  14. {
  15.         return x.gra>y.gra;
  16. }
  17. bool cmp2(people x,people y)
  18. {
  19.         return x.num<y.num;
  20. }
  21. int main()
  22. {
  23.         cin>>n>>m;
  24.         m=floor(m*1.5);
  25.         for(i=1;i<=n;i++)
  26.         cin>>p[i].num>>p[i].gra;
  27.         sort(p+1,p+1+n,cmp);
  28.         line=p[int(m)].gra;
  29.         m=0;i=1;
  30.         while(p[i].gra>=line)
  31.         {
  32.                 i++;m++;
  33.         }
  34.         cout<<line<<" "<<m<<endl;
  35.         i=1;
  36.         while(p[i].gra>=line)
  37.         {
  38.                 j=i;
  39.                 while(p[j+1].gra==p[j].gra)j++;
  40.                 sort(p+i,p+j+1,cmp2);
  41.         ///        cout<<i<<" "<<j<<endl;
  42.                 for(k=i;k<=j;k++)cout<<p[k].num<<" "<<p[k].gra<<endl;
  43.                 i=j+1;
  44.         }
  45.         return 0;
  46. }
复制代码
回复 支持 反对

使用道具 举报

2

主题

105

帖子

306

积分

中级会员

Rank: 3Rank: 3

积分
306
地板
发表于 2018-7-29 19:49:26 | 只看该作者
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <algorithm>
  7. using namespace std;
  8. int main()
  9. {
  10.         int n,i,j,a[5500],m,c[5500],h,a2,x,y,z;
  11.         scanf("%d %d",&n,&m);
  12.         for(i=1;i<=n;i++)
  13.         {
  14.                 scanf("%d %d",&c[i],&a[i]);
  15.         }
  16.        
  17.         for(i=1;i<=n-1;i++)
  18.         {
  19.                 for(j=1;j<=n-i;j++)
  20.                 {
  21.                         if(a[j]<a[j+1])
  22.                         {
  23.                                 a2=a[j];
  24.                                 a[j]=a[j+1];
  25.                                 a[j+1]=a2;
  26.                                 a2=c[j];
  27.                                 c[j]=c[j+1];
  28.                                 c[j+1]=a2;
  29.                         }
  30.                         else if(a[j]==a[j+1])
  31.                         {
  32.                                 if(c[j]>c[j+1])
  33.                                 {
  34.                                         a2=c[j];
  35.                                     c[j]=c[j+1];
  36.                                            c[j+1]=a2;
  37.                                 }
  38.                         }
  39.                 }
  40.         }
  41.         h=m*1.5;
  42.         for(i=h;a[i]==a[i+1];i++)
  43.         {
  44.                 h++;
  45.         }
  46.         printf("%d %d\n",a[h],h);
  47.         for(i=1;i<=h;i++)
  48.         {
  49.                 printf("%d %d\n",c[i],a[i]);
  50.         }
  51.     return 0;
  52. }
复制代码
回复 支持 反对

使用道具 举报

9

主题

158

帖子

470

积分

华一学生

积分
470
QQ
5#
发表于 2018-8-27 15:10:14 | 只看该作者
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cmath>
  4. using namespace std;
  5. int n,m;
  6. int k,t;
  7. struct volunteer
  8. {
  9.     int score;
  10.     int num;
  11. }a[10000];
  12. bool operator< (volunteer a,volunteer b)
  13. {
  14.     if(a.score>b.score)return 1;
  15.     else if(a.score<b.score)return 0;
  16.     else return a.num<b.num;
  17. }
  18. int main()
  19. {
  20.     cin>>n>>m;
  21.     for(int i=1;i<=n;i++)cin>>a[i].num>>a[i].score;
  22.     sort(a+1,a+1+n);
  23.     k=floor(m*1.5);
  24.     cout<<a[k].score<<' ';
  25.     for(int i=1;i<=n;i++)if(a[i].score>=a[k].score)t++;
  26.     cout<<t<<endl;
  27.     for(int i=1;i<=n;i++)if(a[i].score>=a[k].score)cout<<a[i].num<<' '<<a[i].score<<endl;
  28.     return 0;
  29. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-26 03:41 , Processed in 0.198046 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表