心得:

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(≤10​4​​,总人数)和 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 练习五十五 集体照相关推荐

  1. 诛天者 pat basic 练习六十 爱丁顿数

    心得: 这个题和完美数列一样,先排序,利用数据之间的关系来比较判断 所以一定要熟记先排序后判定的手法 题目: 英国天文学家爱丁顿很喜欢骑车.据说他为了炫耀自己的骑车功力,还定义了一个"爱丁顿 ...

  2. 狂暴者 pat basic 练习二十五 反转链表

    心得: 1.map还分为普通map和unordered_map,map需要根据key进行排序,而un不要,所以un更快一些 2.除了map.insert()方法能插入数据外,还有一种中括号赋值的方式更 ...

  3. Python编程基础:第五十五节 map函数Map

    第五十五节 map函数Map 前言 实践 前言 map函数的作用是将指定函数作用于一个可迭代对象内部的每一个元素,其表达方式为map(function, iterable),第一个位置指定作用函数,第 ...

  4. 【零基础学Java】—Socket类(五十五)

    [零基础学Java]-Socket类(五十五) Socket类:该类实现客户端套接字,套接字是指两台设备之间通讯的端点. 在Java中,提供了两个类用于实现TCP通信程序 客户端:java.net.S ...

  5. JavaScript学习(五十五)—组合继承

    JavaScript学习(五十五)-组合继承 组合继承:就是借用构造方法继承和原型链继承的组合形式

  6. 信息系统项目管理师核心考点(五十五)配置管理员(CMO)的工作

    科科过为您带来软考信息系统项目管理师核心重点考点(五十五)配置管理员(CMO)的工作,内含思维导图+真题 [信息系统项目管理师核心考点]配置管理员(CMO)的工作 1.制定配置管理计划 2.识别配置项 ...

  7. 我的世界服务器群系修改,我的世界创世神教程 第五十五节修改选区的生物群系|功能介绍|难点介绍|这节...

    我的世界WorldEdit创世神高级系列教程 第五十五节修改选区的生物群系.本教程由64条不同的技巧,功能介绍,难点介绍,防范措施介绍,工具介绍等组成.适合高级玩家和腐竹们来学习.这节内容给大家介绍修 ...

  8. 达芬奇密码 第五十五章 第五十六章

    达芬奇密码 第五十五章 第五十六章[@more@] 第五十五章 索菲靠着兰登坐在长沙发上,喝着茶吃着烤饼,享受着食物的美味.雷·提彬爵士微笑着,在炉火前面笨拙地踱来踱去.假肢敲在地面上,发出" ...

  9. html5关于校庆作品名称,五十五周年校庆标语

    办学宗旨:学校以基督教信仰为办学的基础及原则,提供优质教育,注重学生灵.德.智.体.群.美六育均衡发展,贯彻基督教全人教育的精神,使学生爱神爱人,品格端正,学识丰富,成为社会栋梁. 校训:敬畏耶和华是 ...

  10. [Python从零到壹] 五十五.图像增强及运算篇之图像平滑(均值滤波、方框滤波、高斯滤波)

    又是一年1024,首先,祝大家节日快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界 ...

最新文章

  1. 02_MyBatis项目结构,所需jar包,ehcache.xml配置,log4j.properties,sqlMapConfig.xml配置,SqlMapGenerator.xml配置
  2. Android SoundPool 的简单使用
  3. 应用程序环境块相关代码
  4. P2571 [SCOI2010]传送带
  5. 详解凸优化、贝叶斯、MCMC、GCN
  6. 基于Zookeeper使用ZkClient实现分布式锁
  7. 个人博客代码_Jekyll + Github Pages 搭建个人免费博客
  8. alinq mysql_ALinq 使用教程(移植 Linq to SQL 的利器)
  9. 用私有构造器或枚举类型强化Singleton属性(3)
  10. 网件rax40可以刷梅林_支持WiFi6,带宽达到3000Mbps,网件RAX40路由器评测 | 钛极客...
  11. Java序列化中的SerialVersionUid
  12. Ubuntu20.04 安装微信
  13. Win10最新批量激活
  14. 北斗与GPS有哪些区别?
  15. 键盘鼠标是计算机标准输入输出设备,输入输出设备.ppt
  16. <Zhuuu_ZZ>让我们来康康脚本流程控制
  17. 我习于水,志成于冰——谈匠心
  18. GBase 8c发布(一)
  19. 安装配置Android Studio集成开发环境
  20. javax.el.PropertyNotFoundException: Property 'eid' not found on type com.aqd.entity.User

热门文章

  1. 计算机听音乐没有声音怎么回事,急!我的电脑没有了声音,不能听音乐了,为什么?怎么解决?...
  2. 本科学历职称计算机最低通过,本科学历以下的,对不起啦……
  3. HTML5 img图片 标签
  4. 计算机二级无纸化考试题库,计算机二级无纸化笔试题库.doc
  5. 友情链接交换标准注意事项
  6. DoraemonKit官方活动:提PR,赢大奖
  7. 对于Excel界址点坐标批量转SHP方法——模型构建器
  8. 如何写出杀手级的简历
  9. 小白入门——关于什么是人脸布控
  10. [摘录]时间会证明一切