当前位置: 首页 > article >正文

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

题目描述

世博会志愿者的选拔工作正在 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)。数据保证选手的报名号各不相同。

输出格式

第一行,有 2 个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。

从第二行开始,每行包含 2 个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。

输入输出样例

输入 

6 3 
1000 90 
3239 88 
2390 95 
7231 84 
1005 95 
1001 88

输出 

88 5 
1005 95 
2390 95 
1000 90 
1001 88 
3239 88 

说明/提示

【样例说明】

m×150%=3×150%=4.5,向下取整后为 4。保证 4 个人进入面试的分数线为 88,但因为 88 有重分,所以所有成绩大于等于 88 的选手都可以进入面试,故最终有 5 个人进入面试。

代码

无注释版

#include<bits/stdc++.h>
using namespace std;
struct xs{int h;int s;
}a[5010];
bool cmp(xs p, xs q){if(p.s==q.s) return p.h<q.h;else return p.s>q.s;
}
int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++){cin>>a[i].h>>a[i].s;}double g=m*1.5;int f=floor(g);sort(a+1,a+n+1,cmp);int sum=0,k=a[f].s;for(int i=f+1;i<=n;i++){if(a[i].s==a[f].s){sum++;}	}cout<<k<<" "<<f+sum<<"\n";for(int i=1;i<=f+sum;i++){cout<<a[i].h<<" "<<a[i].s<<"\n";}
}

有注释版 

#include<bits/stdc++.h>  // 包含标准库的所有头文件
using namespace std;    // 使用标准命名空间// 定义一个结构体xs,表示选手的信息
struct xs{int h;  // 报名号int s;  // 笔试成绩
}a[5010];  // 定义一个结构体数组a,最多存储5010个选手的信息// 自定义比较函数cmp,用于排序
bool cmp(xs p, xs q){if(p.s==q.s) return p.h<q.h;  // 如果成绩相同,按报名号升序排列else return p.s>q.s;           // 否则按成绩降序排列
}int main(){int n,m;  // n:报名选手总数,m:计划录取人数cin>>n>>m;  // 输入n和m// 循环输入每个选手的报名号和成绩for(int i=1;i<=n;i++){cin>>a[i].h>>a[i].s;}double g=m*1.5;  // 计算面试人数的150%比例int f=floor(g);  // 向下取整得到面试人数fsort(a+1,a+n+1,cmp);  // 对选手数组进行排序,按照自定义规则cmpint sum=0,k=a[f].s;  // sum用于统计与分数线相同的额外人数,k存储分数线// 检查分数线之后是否有相同成绩的选手for(int i=f+1;i<=n;i++){if(a[i].s==a[f].s){sum++;  // 如果有,则增加sum}    }// 输出分数线和实际进入面试的人数cout<<k<<" "<<f+sum<<"\n";// 输出所有进入面试的选手信息for(int i=1;i<=f+sum;i++){cout<<a[i].h<<" "<<a[i].s<<"\n";}return 0;  // 程序正常结束
}
http://www.lryc.cn/news/2386772.html

相关文章:

  • PPT连同备注页(演讲者模式)一块转为PDF
  • 第三十二天打卡
  • 项目三 - 任务8:实现词频统计功能
  • MongoDB 快速整合 SpringBoot 示例
  • 2025.05.22-得物春招机考真题解析-第二题
  • ollama list模型列表获取 接口代码
  • OPC Client第5讲(wxwidgets):初始界面的事件处理;按照配置文件初始化界面的内容
  • 什么是BFC,如何触发BFC,BFC有什么特性?
  • python做题日记(9)
  • Leetcode 3557. Find Maximum Number of Non Intersecting Substrings
  • 【C++进阶篇】初识哈希
  • Spring Boot——自动配置
  • 免费轻量便携截图 录屏 OCR 翻译四合一!提升办公效率
  • 使用 Vuex 实现用户注册与登录功能
  • 进程通信(管道,共享内存实现)
  • 电池预测 | 第28讲 基于CNN-GRU的锂电池剩余寿命预测
  • 快速上手SHELL脚本常用命令
  • 【无标题】前端如何实现分页?
  • 【自然语言处理与大模型】大模型Agent四大的组件
  • 小巧高效的目录索引生成软件
  • 云原生架构设计相关原则
  • android实现使用RecyclerView详细
  • 华为云Flexus+DeepSeek征文 | Flexus X实例助力 Dify-LLM 一键部署:性能跃升与成本优化的革新实践
  • 曼昆经济学原理第九版目录
  • 数据库blog7_MySql的下载与配置准备
  • YOLOv11助力地铁机场安检!!!一键识别刀具
  • RFID工业读写器的场景化应用选型指南
  • java中的线程安全的集合
  • 单片机如何快速实现查看实时数据
  • go实现钉钉三方登录