诛天者 pat basic 练习五十五 集体照
心得:
1.这一题很像螺旋矩阵,他们都是排好序然后一个一个按要求填数的,所以要记住这种先在一个容器排好序,在另一个容器按照要求放置的思想
2.第一次使用deque,双端数组在处理前后添加的时候很好用
3.当题目出现"交替式"的时候,考虑使用一个"开关",就是一个bool变量,
在其为真的时候做一种事,为假的时候做另一种事,每次做完之后还要改变他的值,
即bool=!bool,就跟使用开关一样
题目:
拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下:
每排人数为 N/K(向下取整),多出来的人全部站在最后一排;
后排所有人的个子都不比前排任何人矮;
每排中最高者站中间(中间位置为 m/2+1,其中 m 为该排人数,除法向下取整);
每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为175、188、190、186、170。这里假设你面对拍照者,所以你的左边是中间人的右边);
若多人身高相同,则按名字的字典序升序排列。这里保证无重名。
现给定一组拍照人,请编写程序输出他们的队形。
输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出两个正整数 N(≤104,总人数)和 K(≤10,总排数)。随后 N 行,每行给出一个人的名字(不包含空格、长度不超过 8 个英文字母)和身高([30, 300] 区间内的整数)。
输出格式:
输出拍照的队形。即K排人名,其间以空格分隔,行末不得有多余空格。注意:假设你面对拍照者,后排的人输出在上方,前排输出在下方。
输入样例:
10 3
Tom 188
Mike 170
Eva 168
Tim 160
Joe 190
Ann 168
Bob 175
Nick 186
Amy 160
John 159
输出样例:
Bob Tom Joe Nick
Ann Mike Eva
Tim Amy John
思路:
先在vector容器排好序,然后在向deque填数
之所以用deque,因为它前插后插很方便,很容易实现交替式排序
基本思路就是这,但是看代码就懂了
代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<deque>
using namespace std;
struct stu
{string name;int height;
};
bool cmp(stu a, stu b)
{if(a.height!=b.height)return a.height>b.height;return a.name<b.name;
}
int main()
{int num,row,m,more,index=0;//m是每排的人数,more是多出来的人数,index是下面容器的索引cin>>num>>row;m=num/row;more=num%row;//多出来的人数用取余符就可以求出stu temp;vector<stu> v;vector<deque<string>> res;//结果容器for(int i=0;i<num;i++){cin>>temp.name>>temp.height;v.push_back(temp);}sort(v.begin(),v.end(),cmp);//先将容器排好序,然后一个一个向deque中填数for(int i=row;i>0;i--){bool swi=true;//这个bool变量的作用像一个开关一样,因为是交替插入,怎么实现呢?就用这个东西//如果是开着的(true)就插在前,如果是关着的(false)就插在后,然后每次插完一个就按下开关(改变值)deque<string> d;if(i==row)//如果是最后一排,因为可能会包含多出的人,所以要特殊对待{for(int j=0;j<m+more;j++){if(swi)//如若为真尾插,即插在右{d.push_back(v.at(index).name);swi=!swi;//插完之后改变开关的转态,为了下次的正确插入位置index++;//index是已经排好序的vector容器的索引}else{d.push_front(v.at(index).name);swi=!swi;index++;}}}else//普通排,每排就只有m个人了{for(int j=0;j<m;j++){if(swi){d.push_back(v.at(index).name);swi=!swi;index++;}else{d.push_front(v.at(index).name);swi=!swi;index++;}}}res.push_back(d);}for(int i=0;i<res.size();i++){for(int j=0;j<res.at(i).size();j++){cout<<res.at(i).at(j);if(j!=res.at(i).size()-1)cout<<" ";}cout<<endl;}return 0;
}
诛天者 pat basic 练习五十五 集体照相关推荐
- 诛天者 pat basic 练习六十 爱丁顿数
心得: 这个题和完美数列一样,先排序,利用数据之间的关系来比较判断 所以一定要熟记先排序后判定的手法 题目: 英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个"爱丁顿 ...
- 狂暴者 pat basic 练习二十五 反转链表
心得: 1.map还分为普通map和unordered_map,map需要根据key进行排序,而un不要,所以un更快一些 2.除了map.insert()方法能插入数据外,还有一种中括号赋值的方式更 ...
- Python编程基础:第五十五节 map函数Map
第五十五节 map函数Map 前言 实践 前言 map函数的作用是将指定函数作用于一个可迭代对象内部的每一个元素,其表达方式为map(function, iterable),第一个位置指定作用函数,第 ...
- 【零基础学Java】—Socket类(五十五)
[零基础学Java]-Socket类(五十五) Socket类:该类实现客户端套接字,套接字是指两台设备之间通讯的端点. 在Java中,提供了两个类用于实现TCP通信程序 客户端:java.net.S ...
- JavaScript学习(五十五)—组合继承
JavaScript学习(五十五)-组合继承 组合继承:就是借用构造方法继承和原型链继承的组合形式
- 信息系统项目管理师核心考点(五十五)配置管理员(CMO)的工作
科科过为您带来软考信息系统项目管理师核心重点考点(五十五)配置管理员(CMO)的工作,内含思维导图+真题 [信息系统项目管理师核心考点]配置管理员(CMO)的工作 1.制定配置管理计划 2.识别配置项 ...
- 我的世界服务器群系修改,我的世界创世神教程 第五十五节修改选区的生物群系|功能介绍|难点介绍|这节...
我的世界WorldEdit创世神高级系列教程 第五十五节修改选区的生物群系.本教程由64条不同的技巧,功能介绍,难点介绍,防范措施介绍,工具介绍等组成.适合高级玩家和腐竹们来学习.这节内容给大家介绍修 ...
- 达芬奇密码 第五十五章 第五十六章
达芬奇密码 第五十五章 第五十六章[@more@] 第五十五章 索菲靠着兰登坐在长沙发上,喝着茶吃着烤饼,享受着食物的美味.雷·提彬爵士微笑着,在炉火前面笨拙地踱来踱去.假肢敲在地面上,发出" ...
- html5关于校庆作品名称,五十五周年校庆标语
办学宗旨:学校以基督教信仰为办学的基础及原则,提供优质教育,注重学生灵.德.智.体.群.美六育均衡发展,贯彻基督教全人教育的精神,使学生爱神爱人,品格端正,学识丰富,成为社会栋梁. 校训:敬畏耶和华是 ...
- [Python从零到壹] 五十五.图像增强及运算篇之图像平滑(均值滤波、方框滤波、高斯滤波)
又是一年1024,首先,祝大家节日快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界 ...
最新文章
- 02_MyBatis项目结构,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置
- Android SoundPool 的简单使用
- 应用程序环境块相关代码
- P2571 [SCOI2010]传送带
- 详解凸优化、贝叶斯、MCMC、GCN
- 基于Zookeeper使用ZkClient实现分布式锁
- 个人博客代码_Jekyll + Github Pages 搭建个人免费博客
- alinq mysql_ALinq 使用教程(移植 Linq to SQL 的利器)
- 用私有构造器或枚举类型强化Singleton属性(3)
- 网件rax40可以刷梅林_支持WiFi6,带宽达到3000Mbps,网件RAX40路由器评测 | 钛极客...
- Java序列化中的SerialVersionUid
- Ubuntu20.04 安装微信
- Win10最新批量激活
- 北斗与GPS有哪些区别?
- 键盘鼠标是计算机标准输入输出设备,输入输出设备.ppt
- <Zhuuu_ZZ>让我们来康康脚本流程控制
- 我习于水,志成于冰——谈匠心
- GBase 8c发布(一)
- 安装配置Android Studio集成开发环境
- javax.el.PropertyNotFoundException: Property 'eid' not found on type com.aqd.entity.User
热门文章
- 计算机听音乐没有声音怎么回事,急!我的电脑没有了声音,不能听音乐了,为什么?怎么解决?...
- 本科学历职称计算机最低通过,本科学历以下的,对不起啦……
- HTML5 img图片 标签
- 计算机二级无纸化考试题库,计算机二级无纸化笔试题库.doc
- 友情链接交换标准注意事项
- DoraemonKit官方活动:提PR,赢大奖
- 对于Excel界址点坐标批量转SHP方法——模型构建器
- 如何写出杀手级的简历
- 小白入门——关于什么是人脸布控
- [摘录]时间会证明一切