c++之洛谷P1068分数线划定
这是个排序题,做题过程中对sort的理解加深了不少,记下来避免忘记。
题目来源:https://www.luogu.org/problemnew/show/P1068
题目描述
世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,AA市对
所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根
据计划录取人数的150\%150%划定,即如果计划录取mm名志愿者,则面试分数线为排名第m \times 150\%m×150%
(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有
选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成
绩。
输入输出格式
输入格式:
第一行,两个整数 n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n)n,m(5≤n≤5000,3≤m≤n),中间用一个空格隔开,其
中nn表示报名参加笔试的选手总数,mm表示计划录取的志愿者人数。输入数据保证 m \times 150\%m×150%
向下取整后小于等于 nn。
第二行到第 n+1n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号 k(1000 ≤ k ≤ 9999)k(1000≤k≤9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)s(1≤s≤100)。数据保证选手的报名号各不相同。
输出格式:
第一行,有22个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为进入面试的选手的实际人数。
从第二行开始,每行包含22个整数,中间用一个空格隔开,分别表示进入面试的选手的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的顺序输出。
输入示例:
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
分析:结构体定义,分数排序,确定分数线,确定实际大于等于分数线的人数,考号排序,输出。
后来发现可以直接将分数排序和考号排序合成一体,减少了好几行代码。
初次代码思路:
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
struct Can {
int num;
int score;
}can[];
bool compare1(Can a, Can b)
{
return a.score > b.score;
}
bool compare2(Can a, Can b)
{
return a.num < b.num;
}
int n, m;
int mline, mscore;
int head = , tail = , mid;
int main()
{
cin >> n >> m;
for (int i = ; i < n; i++) cin >> can[i].num >> can[i].score;
sort(can, can + n, compare1);
mline = floor(1.5*m);
mscore = can[mline - ].score;
for (int i = floor(1.5*m); i < n; i++)
if (can[i].score == mscore)
mline++;
mid = can[].score;
for (int i = ; i <= mline; i++)
{
if (can[i].score != mid)
{
sort(can + head, can + tail + head, compare2);
head = head + tail;
tail = ;
mid = can[head].score;
}
else tail++;
}
cout << mscore << " " << mline << endl;
for (int i = ; i < mline; i++)
cout << can[i].num << " " << can[i].score << endl;
return ;
}
备忘录1:结构体排序
bool compare(example x, example y)
{
return x.a<y.a;
//<升序,>降序
} struct example
{
int a,b;
}ex[n]; sort(ex, ex+n, compare);
即可对ex[n]中的a部分进行升序排序,其他部分(b)随动。
若要将分数排序和考号排序合成一体,可用如下代码:
struct Can {
int num;
int score;
}can[];
int cmp(Can a, Can b){
if(a.score>b.score){
//比成绩
return true;
}
else if(a.score==b.score){
if(a.num<b.num)return true;
//比较考号
else return false;
}
else return false;
}
减少了31-40行的10行代码,还减少了出错的可能性。
备忘录2:部分排序
一般用到排序时我们是这样用的:
int p[n]; sort(p,p+n,compare);
从p数组的开头开始,进行长度为n的排序。
那么,不从p的开头开始而是从其中间开始的排序应该怎么写呢?
sort(p+a,p+b,compare);
其中a为开始排序的下标,b-1为结束排序的下标。
例:
int p[]={,,,,,,};
sort(p+,,p+);//结果{9,3,4,5,6,7,8}
sort(p+,p+);//结果{9,4,5,6,7,8,3}
sort(p+,p+);//结果{9,8,6,7,5,4,3}
也就是说b-a就是排序的长度。
c++之洛谷P1068分数线划定的更多相关文章
- 洛谷——P1068 分数线划定
P1068 分数线划定 题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据 ...
- 洛谷 P1068 分数线划定
P1068 分数线划定 题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据 ...
- 洛谷P1068 分数线划定:sort结构体排序+贪心
题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试. 面试分数线根据计划录取人数的150%划定, ...
- 洛谷 P1068 分数线划定【结构体排序】
题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150%划 ...
- 洛谷 P1068 分数线划定【排序+模拟】
世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,AA市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150\%150%划 ...
- 洛谷P1068 分数线划定
https://www.luogu.org/problem/P1068 #include<bits/stdc++.h> using namespace std; struct Can { ...
- luogu P1068 分数线划定 x
P1068 分数线划定 题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,A 市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据 ...
- (sort)P1068 分数线划定 洛谷
题目描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行.为了选拔最合适的人才,AA市对 所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试.面试分数线根 据计划录取人数的150\% ...
- 洛谷 P1059明明的随机数 & P1068分数线划定 & P1781宇宙总统
题目:https://www.luogu.org/problemnew/show/P1059 思路:STL中的set使用. //#include<bits/stdc++.h> #inclu ...
随机推荐
- Linux运维之——每日小技巧,使用awk命令截取每行的指定列数据
获取/etc/passwd目录下的UID值小于10的数,并输出第一.三列 [root@:vg_adn_tidbCkhsTest:172.31.30.62 ~]#cat /etc/passwd | aw ...
- MySQL基础之 排序与限制,聚合
排序与限制 ORDER BY 作用:取出按照某个字段进行排序后的记录结果集. 配合:常与DESC 和ASC一块使用:默认是ASC,表示升序.DESC表示降序 LIMIT 作用:用于显示数据的一部分记 ...
- android开发之一如何升级SDK
看了很多文章,都没有成功,下面这篇才是正解,学海无涯苦作舟. Fetching https://dl-ssl.google.com/android/repository/addons_list-2.x ...
- [技术] OIer的C++标准库 : STL入门
注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...
- 团队作业——Alpha冲刺2/12
团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:主要学习JAVA语言,以及加入了Android开发内容的学习. 明日任务:安装Android Studio以及通过观看视频和阅读材料的形式 ...
- PyQt5--QProgressBar
# -*- coding:utf-8 -*- ''' Created on Sep 20, 2018 @author: SaShuangYiBing Comment: ''' import sys f ...
- bootstrap模态框input不能获取焦点并编辑【转】
Bootstrap模态框时input标签[日期控件也有这样的问题]不能编辑的问题,下面是我的解决方法: 1.将下图中框出来的属性删掉即可: 2.兼容火狐浏览器,笔者在火狐中还是不能编辑,去掉下图属性即 ...
- BZOJ 1087 互不侵犯King 状态压缩DP
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1087 题目大意; 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国 ...
- redis在.net架构中的应用(2)--并发和原子操作不可兼得
在上一篇文章中,我主要向大家介绍了利用servicestack连接redis以及一些redis的基本数据类型,传送门 本文中,我将通过一个具体应用场景为大家介绍redis中的并发和原子操作 其中用到的 ...
- Linux命令——文件和目录管理
Linux命令--文件和目录管理 基本命令 命令ls 作用:显示目录下的文件和文件夹 说明:默认显示当前目录,可跟路径参数 参数:-a,显示隐藏目录 参数:-l,显示文件权限 参数:-d,显示文件最后 ...