1055 集体照 (25 分)

2023-11-16

拍集体照时队形很重要,这里对给定的 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

 AC代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct people {				//定义people结构体,包含人的名字和身高
	string name;
	int height;
};
people p[10001], row[10001];//p数组是所有人的信息,row数组存储存储的是当前正在给某一行的人排队序列
bool compare(people p1, people p2)//比较函数,把人的身高从大到小排
{
	if (p1.height != p2.height)//身高不同,就按身高来排
		return p1.height > p2.height;
	else
		return p1.name < p2.name;//身高相同,按字典序升序来排
}
void lineup(int begin, int number) { //排队函数,lineup(begin,number)表示,把从a[begin]开始的a[begin+1],a[begin+2]....a[begin+nubmer-1]共numeber个人排到某一行里
	int i, j;
	if (number % 2)//如果这一行的人数是奇数
	{
		
		lineup(begin, number - 1);//前面number-1个人先排
		row[number] = p[begin + number - 1];//最后一个人插到最后
	}
	else //如果这一行的人数是偶数
	{
		for (j = begin + number - 1, i = 1; i <= number / 2; i++, j -= 2)//先排这一行的前半部分
			row[i] = p[j];
		for (j = begin, i = number / 2 + 1; i <= number; i++, j += 2)//再排这一行的最后半部分
			row[i] = p[j];
	}
}
int main()
{
	int N, K, i,j,last_num,each_num;
	cin >> N >> K;
	for (i = 1; i <= N; i++)
		cin >> p[i].name >> p[i].height;
	each_num = N / K;//前K-1排,一排each_num个人
	last_num = N - N / K*K + each_num;//最后一排last_num个人
	sort(p+1, p + N+1, compare);//把p[1]到p[N]共N个人排序
 
	lineup(1, last_num);//排出最后一行
	for (i = 1; i < last_num; i++)//输出最后一行的人的信息
		cout << row[i].name << " ";
	cout <<row[last_num].name<< endl;
 
	for (i = 1; i < K; i++)//排出前面的K - 1行
	{
		lineup(last_num + (i-1)*each_num + 1, each_num);//从后往前排,一行一行的排
		for (j = 1; j < each_num; j++)//排好一行就输出
			cout << row[j].name << " ";
		cout << row[each_num].name;//结尾不能有空格
		if(i!=K-1)
			cout << endl;//最后一行也不能有换行
	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1055 集体照 (25 分) 的相关文章

  • 【01规划】POJ 3621 Sightseeing Cows

    POJ 3621 Sightseeing Cows 题意 给定一张 n 个点 m 条边的有向图 每个点都有一个权值 f i 每条边都有一个权值 t i 求图中的一个环 使 环上各点的权值之和 除以 环上各边的权值之和 最大 输出这个最大值
  • MVC 实现登录功能

    1 表单 2 数据层 3 逻辑层 4 servlet分发控制器
  • 高校巡讲总结—侯伯薇讲师

    这个月里面 借助CSDN的平台 在三所高校中做了 程序员修炼之路 的巡讲 在其中讲述了自己的一些经历 并和同学们聊了学习 思考和分享这三个要素 三所高校各自有各自的特点 感觉很有意思 一一叙述如下 首先 第一站是在辽宁工程技术大学 位于葫芦
  • 总结Windows下安装WSL与升级WSL2的方法

    目录 1 安装WSL1的方法 2 安装WSL2的方法 3 升级WSL1到WSL2的方法 1 打开win10的设置 搜索windows功能 打开启用或者关闭Windows功能 2 勾选以下2个地方 并重启 3 下载WSL2升级包 并点击安装
  • JS原型

    原型的概念 实例对象中 proto 是原型 是一个属性也是一个对象 是给浏览器使用的 是不标准的 这个叫隐式原型 构造函数中的prototype是原型 是一个属性也是一个对象 是给程序员用的 是标准的 proto 原型是浏览器使用的 有些浏
  • JDBC-数据库连接字符串

    SQLSERVER Connection conn DriverManager getConnection jdbc sqlserver localhost 1433 sa Oracle Connection conn DriverMana
  • 什么是rem单位和em单位?它们有什么区别?

    聚沙成塔 每天进步一点点 专栏简介 rem 和 em 单位 rem 单位 Root Em em 单位 区别总结 写在最后 专栏简介 前端入门之旅 探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到
  • vue使用echarts与echarts-gl实现3d地图与 3d柱状图

    目录 前言 一 下载echarts与echarts gl 二 vue引入与页面使用 1 引入 2 页面引入echarts gl 三 下载地图数据 四 使用地图 1 html初始化地图放入位置 2 data创建变量 3 创建地图 4 钩子函数
  • remote: Support for password authentication was removed on August 13, 2021

    1 github在2021年8月13日这天搞事情 如果这天你提交了github代码报错如下 remote Support for password authentication was removed on August 13 2021 P
  • 第3章 分布式文件系统HDFS

    3 1 分布式文件系统 3 1 1 计算机集群结构 3 1 2 分布式文件系统的结构 两类节点 1 主节点 Master Node 或称为 名称节点 NameNode 负责文件和目录的创建 删除和重命名等 同时管理着数据节点和文件块的映射关
  • python噪声

    1 skimage的API noise gs img util random noise img mode gaussian gaussian 高斯加性噪声 noise salt img util random noise img mode
  • 粒子群算法(PSO)优化RBF神经网络实践

    算法原理及流程 关于RBF神经网络的细节详见 RBF神经网络学习及实践 关于PSO算法的细节详见 粒子群优化算法 PSO python实践 PSO算法优化RBF神经网络训练流程图如下所示 代码实现 代码直接使用文章RBF神经网络学习及实践和
  • 23+ Useful HTML5 Open Source Online Video Players & Libraries,

    Akamai s Open Video Player for HTML5
  • blender基本操作

    文章目录 引言 一 选择 二 移动 1 xyz轴移动 2 xyz平面移动 3 精确移动 4 快捷键移动G 三 旋转 四 缩放 五 变换 1 变换坐标系 2 变换轴心 六 吸附 七 模式切换 八 物体的合并和分离 1 合并 2 分离 九 设置
  • 51单片机一个按键,通过单击,双击,三击,长按实现四种不同的led特效并且每次切换模式伴随不同的音效。(连击4下为无效指令)

    一个定时器负责扫描按键按下的时间长短 一个定时器负责实现具体的led特效功能 主函数循环扫描按键 避免了占用cpu资源过多 导致程序堵塞 无法扫描到按键等问题 还可以通过定时器来扫描按键按下 时长等 想要实现的程序放在主函数中执行 新人第一
  • [Matlab有限元分析] 1.有限元分析的发展、基本概念和特点

    英国有限元方法专家Zienkiewicz的书籍 有限元方法 在开头关于有限元方法的概述说的特别好 摘录如下 由于人类思维的局限 使得人们无法将复杂的宇宙万物只用简单的表达来概括 因此 人们会将复杂的系统分解成为一个个部件或者单元 而这些部件
  • cmake关键字file理解

    1 file WRITE filename message to write WRITE选项将会写一条消息到名为filename的文件中 如果文件已经存在 该命令会覆盖已有的文件 如果文件不存在 它将创建该文件 2 file APPEND
  • 解决Windows下安装PostgreSQL :“unable to write inside temp environment variable path”的错误

    Windows下安装PostgreSQL 启动安装程序的时候报错 unable to write inside temp environment variable path 解决方法 1 开始菜单 打开运行 2 输入regedit 打开注册

随机推荐

  • SQL Sever——远程过程调用失败(0x800706be)

    最近重装了系统 VS和SQL Sever莫名奇妙的不能用了 下面总结一下这个过程中遇到的问题 跟大家分享一下经验 大概是以前的安装过程都十分顺利 这次 在尝试了数次登陆不上去之后 我仍然怀疑是自己眼花了 怎么办 查吧 一开始我想到的 肯定是
  • Vmware安装虚拟机出现attempting to start up from?一文帮你解决

    有很多小伙伴在安装windows是会出现一个attempting to start up from提示 然后就会进入一个蓝色的页面 也就是下边这两张图 这时候会让你选择在这时候有很多小伙伴就懵了 我应该怎么选择 不要方 下边我来教你解决 下
  • 两数相加(java)

    给你两个 非空 的链表 表示两个非负的整数 它们每位数字都是按照 逆序 的方式存储的 并且每个节点只能存储 一位 数字 请你将两个数相加 并以相同形式返回一个表示和的链表 你可以假设除了数字 0 之外 这两个数都不会以 0 开头 例 输入
  • ChatGPT之后,值得关注的垂直领域大模型

    垂直领域大模型是指在特定的领域或行业中经过训练和优化的大型语言模型 与通用语言模型相比 垂直领域大模型更专注于某个特定领域的知识和技能 具备更高的领域专业性和实用性 题图 from unsplash 与通用大模型相比 垂直领域大模型具有以下
  • VMware下安装win7教程

    上课会用到win7 闲来无事记录下安装win7过程 我是不会说教傻子朋友的 一 安装镜像 在网上找了好多不行最后找到了 Windows7 64位 ed2k file cn windows 7 ultimate with sp1 x64 dv
  • .c文件生成.cgi文件

    方法一 hello c文件 方法二 base h cgic c cgic h file upload c多文件同时编译
  • 计算机网络—Http协议的特点,基本格式,状态码,get和post的区别

    目录 一 Http协议是什么 1 什么是Http协议 2 Http协议的特点 3 Cookie和 Session的区别 面试常考 二 Http协议的基本格式 1 Http请求 Request 2 Http响应 Response 3 协议格式
  • Cesium 物理隔绝-取消默认请求bing底图

    说明 场景是物理隔绝的网络 即不能使用在线地图服务 这里有一个认证 在离线没网的情况下会一直请求卡在那里 解决方案 直接上代码 var defaultImagery new Cesium ProviderViewModel name def
  • POJ - 2531 Network Saboteur

    A university network is composed of N computers System administrators gathered information on the traffic between nodes
  • LInux下Mplayer字幕乱码,日文字体部分乱码解决方案

    ASS字幕如果不能加载的话 则需要把ASS字幕编码由utf16转换为utf8 用gedit也可以用这个也可以 iconv f utf16 t utf8 subtitle utf16 ass gt subtitle utf8 ass 在Pre
  • doris & StarRocks 错题本

    一 spark streaming load写入失败 Reason column count mismatch expect 25 real 1 src line demo masking 1 2018 02 17 1 B35C300672
  • 【排序算法(一)】各种排序算法的主要方式和复杂度分析

    概念 1 排序 按关键字有序的序列 2 稳定性 假设ki kj 1 lt i j lt n i j 且在排序前ri领先于rj 即i
  • 以区块链技术助力高新技术发展和产业创新

    摘要 区块链技术作为一种新兴技术 其核心特点是去中心化 具有广阔发展前景 将区块链技术作为自主创新和高新技术发展的重要突破口 是当前产业创新的重要途径之一 区块链技术发展的关键是攻克核心技术 为此 应加强相关领域的应用和实践探索 从实践中总
  • Chrome浏览器无法打开特定的网页

    问题描述 chrome浏览器 版本为 87 0 4280 66 正式版本 64 位 打开除了特定网页的其他网页均正常 解决方法 单机Chrome浏览器右上角的 自定义及控制Google Chrome gt 设置 S 将 设置 页面往下拖动后
  • (2022 CVPR) Unbiased Teacher v2

    Unbiased Teacher v2 Semi supervised Object Detection for Anchor free and Anchor based Detectors https github com faceboo
  • 国际基因编辑科技发展报告

    来源 全球技术地图 作者 贾晓峰 中国科学技术信息研究所 摘要 以特异性的改变遗传物质靶向基因序列为目标的基因编辑技术是近年生命科学领域最热门的研究领域之一 围绕基因编辑的相关领域研究和人物事件连续多年入选Nature国际科学事件和科学人物
  • Android MediaCodec硬件解码视频播放

    1 MediaCodec 是什么 MediaCodec类可以访问底层媒体编解码器框架 StageFright 或 OpenMAX 即编解码组件 是Android 的低层多媒体基础设施的一部分 通常与MediaExtractor MediaS
  • 推动刷脸支付为入口的场景新零售新科技浪潮

    刷脸支付正呈现不断创新 与其他数字化软硬件无缝链接 场景深入 更新迭代 打造人性化服务等势头较好局面 但火爆的背后应该是谨慎的对待 而不是疯狂增长 此外 随着刷脸支付的不断深入 移动支付也更加深入到生活多场景 这也为 刷脸支付 未来的市场扩
  • 进程间的通信方式与同步方式有哪些?进程间的通信方式与同步方式区别是什么?线程之间的通信方式与同步方式有哪些?线程间的通信方式与同步方式区别是什么?一文全部搞懂

    进程间的通信方式与同步方式有哪些 进程间的通信方式与同步方式区别是什么 线程之间的通信方式与同步方式有哪些 线程间的通信方式与同步方式区别是什么 本文会详细解释这几个问题 一开始在学习操作系统的时候经常糊涂 感觉比较混乱 进程间的通信方式与
  • 1055 集体照 (25 分)

    拍集体照时队形很重要 这里对给定的 N 个人 K 排的队形设计排队规则如下 每排人数为 N K 向下取整 多出来的人全部站在最后一排 后排所有人的个子都不比前排任何人矮 每排中最高者站中间 中间位置为 m 2 1 其中 m 为该排人数 除法