1055 集体照 (25 分)

拍集体照时队形很重要,这里对给定的 NNN 个人 KKK 排的队形设计排队规则如下:

  • 每排人数为 N/KN/KN/K(向下取整),多出来的人全部站在最后一排;

  • 后排所有人的个子都不比前排任何人矮;

  • 每排中最高者站中间(中间位置为 m/2+1m/2+1m/2+1,其中 mmm 为该排人数,除法向下取整);

  • 每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为175、188、190、186、170。这里假设你面对拍照者,所以你的左边是中间人的右边);

  • 若多人身高相同,则按名字的字典序升序排列。这里保证无重名。

现给定一组拍照人,请编写程序输出他们的队形。

输入格式:

每个输入包含 1 个测试用例。每个测试用例第 1 行给出两个正整数 NNN(≤104\le 10^4≤10​4​​,总人数)和 KKK(≤10\le 10≤10,总排数)。随后 NNN 行,每行给出一个人的名字(不包含空格、长度不超过 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

思路

感觉此题难点在于排序和逻辑推理。

代码

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;struct node {string name;int height;
};
int cmp(struct node a, struct node b) {return a.height != b.height ? a.height > b.height: a.name < b.name;
}int main()
{int n, k, m;cin >> n >> k;vector<node> stu(n);for (int i = 0; i < n; i++) {        //输入姓名 体重cin >> stu[i].name;cin >> stu[i].height;}sort(stu.begin(), stu.end(), cmp);int t = 0, row = k;while (row) {if (row == k)m = n - n / k * (k - 1);elsem = n / k;vector<string> ans(m);ans[m / 2] = stu[t].name;// 左边一列int j = m / 2 - 1;for (int i = t + 1; i < t + m; i = i + 2)ans[j--] = stu[i].name;// 右边一列j = m / 2 + 1;for (int i = t + 2; i < t + m; i = i + 2)ans[j++] = stu[i].name;// 输出当前排cout << ans[0];for (int i = 1; i < m; i++)cout << " " << ans[i];cout << endl;t = t + m;row--;}return 0;
}

PAT --- 1055.集体照 (25 分)相关推荐

  1. PAT乙级刷题之路1055 集体照 (25分)

    1055 集体照 (25分) 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何 ...

  2. 【Python】 1055 集体照 (25 分)

    1. 题目: 题目地址: https://pintia.cn/problem-sets/994805260223102976/problems/994805272021680128 1055 集体照 ...

  3. C++学习之路 | PTA乙级—— 1055 集体照 (25 分)(精简)

    1055 集体照 (25 分) 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任 ...

  4. PTA 1055 集体照 (25 分) C++实现

    1055 集体照 (25 分) 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任 ...

  5. 【PAT乙级】1055 集体照 (25 分)

    题目地址 #include<bits/stdc++.h> using namespace std; const int N=1e5+10; struct node {string name ...

  6. 1055 集体照 (25 分)(详解)

    拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何人矮: 每排中最高者站中间(中 ...

  7. 1109 Group Photo (25分)/1055 集体照 (25分)后三个测试点

    这个题目很坏,如果是后三个测试点不对,一定是读题没准确. 题目给的第二个输入变量为行数 M/K等于每行人数(除最后一行) 把这两个搞混了只能过前三个测试点. 题目分析: 关于m/2+1其实没必要,以最 ...

  8. 1055. 集体照 (25)

    1055. 集体照 (25) 时间限制 400 ms 内存限制 65536 kB  乙级练习题解目录 拍集体照时队形很重要,这里对给定的N个人K排的队形设计排队规则如下: 每排人数为N/K(向下取整) ...

  9. 7-227 PAT排名汇总 (25 分)

    7-227 PAT排名汇总 (25 分) 计算机程序设计能力考试(Programming Ability Test,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设 ...

  10. 1085 PAT单位排行 (25分)-PAT乙级真题-C++实现

    1085 PAT单位排行 (25分)-PAT乙级真题-C++实现 题目描述: 每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜.本题就请你实现这个功能. 输入格式: 输入第一行给出一个正整 ...

最新文章

  1. html响应式布局平移,jQuery图片内部缩放和平移插件jquery.zoom.js
  2. 零配置构建工具:parcel
  3. 创业公司的个人“可伸缩性”方案
  4. 充值,提现功能涉及的多线程、队列问题
  5. hive字段名、注释中文显示问号
  6. 【Altium Designer10详细安装】
  7. unity怎么制作云飘动_现实的动态云系统特效脚本Unity3D素材资源
  8. Gradle入门教程学习笔记
  9. 高斯消元法解线性方程组
  10. F5 BIG-IP 17.0.0
  11. 电脑ssd硬盘怎么安装使用
  12. Django admin修改app名称
  13. 路由器局域网IP(内网IP)和外网IP的关系
  14. python把所有txt文件整合在一起(步道乐跑题库)
  15. IAR OF STM8 Error[Pe095]: array is too large
  16. python编程语言介绍-编程语言及python介绍
  17. 使用mosquitto开发MQTT客户端
  18. 设置无线移动数据连接到服务器,手机怎么修改无线网络dns
  19. 帝国CMS采集-帝国自动采集-帝国CMS免登录发布插件
  20. React Hooks 18 useEffect 执行2次或多次

热门文章

  1. 消息: Automation 服务器不能创建对象
  2. STM32F401超声波proteus仿真
  3. CSS border 属性及用border画各种图形
  4. 单片机c语言中断嵌套,关于单片机中断嵌套总结
  5. AcWing 741. 斐波那契数列
  6. 牛顿迭代法(求平方根)
  7. python爬虫爬网页源码保存到本地_python爬虫网页图片并保存到本地
  8. 2021抖音上热门技巧有哪些?
  9. 主板24pin接口详图_老电源也兼容 简单DIY 24Pin转接线
  10. java 生成水印_Java生成文字水印