1055 集体照 (25分)

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

当每次循环都要更新时没必要用数组储存数据,可以用一个变量每次循环前都更新来简化运算

#include <iostream>
#include <algorithm>
#include <vector>
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 >> stu[i].height;    }    sort(stu.begin(), stu.end(), cmp);    int t = 0, row = k;    while(row) {        if(row == k)           m = n / k + n % k;        else            m = 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;   //更新t也就是下一行要输出的人的起始下标row--;    }    return 0;
}

PAT乙级刷题之路1055 集体照 (25分)相关推荐

  1. PAT乙级刷题记录——1046 划拳 (15分)

    划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...

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

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

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

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

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

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

  5. PAT乙级刷题心得和常用函数总结 (c++实现)

    开始先说最重要心得体会: 写代码前,先在纸上写写画画,写下伪码,理清思路,别上来就敲代码,效率极低还易出现bug. 2019-12-12到2020-01-17,用C++刷完了PAT乙级95道题目,第6 ...

  6. PAT乙级刷题/1094 谷歌的招聘/C++实现

    一.题目描述 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是 ...

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

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

  8. 【PAT乙级刷题】客似云来

    题目描述 NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来:并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝. 于是, ...

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

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

最新文章

  1. python迭代列表_Python迭代列表中列的元素
  2. Flex 3 与 Flex 4 beta 之间的区别
  3. 3dmax高版本转低版本插件_视频编辑干货资料:低版本打开高版本pr文件
  4. php实现多条件查找分页,Yii2.0框架实现带分页的多条件搜索功能示例
  5. unigui作中间件使用
  6. 安装mysql 错误重新安装
  7. Spring源代码地址
  8. 高性能的java的ip资源扫描和端口分析
  9. 拳皇98系列连招—金家潘学习笔记
  10. 做好自媒体需要具备的几个心态?!
  11. 总结几点学习模电难的原因
  12. python编写电子菜单_python 写三级菜单
  13. java公社博客_Java
  14. logstash截取指定字符和grok的使用
  15. C++开发环境配置实验
  16. 三公到底指太师太傅太保还是…
  17. POWER8内核加密
  18. Face++头部姿势headpose参数解析
  19. 计算机科学专业应届生求职信,计算机科学专业应届生英文求职信范文
  20. 格林威治时间转换成字符串

热门文章

  1. excel如何输入公式的技巧
  2. 7-11 输出大写英文字母 (15 分)
  3. ベルベット / 贝姐
  4. cadence 画电路图时出现绿色的倒三角
  5. 荣耀magic v参数配置
  6. ubuntu 双显卡安装n卡 Quadro K620 Tesla K80*8 显卡驱动的卸载 (已解决)没有图形界面。黑屏
  7. 计算机小知识——键盘三颗灯含义
  8. 快手架构师:3亿日活的快手微服务架构实践
  9. 计算机主机中负责存储运行中程序的部件,计算机内负责解释执行程序的部件被称为什么_常见问题解析...
  10. mahout探索之旅---频繁模式挖掘算法与理解