1109 Group Photo (25分)
Formation is very important when taking a group photo. Given the rules of forming K rows with N people as the following:
The number of people in each row must be / (round down to the nearest integer), with all the extra people (if any) standing in the last row;
All the people in the rear row must be no shorter than anyone standing in the front rows;
In each row, the tallest one stands at the central position (which is defined to be the position (, where m is the total number of people in that row, and the division result must be rounded down to the nearest integer);
In each row, other people must enter the row in non-increasing order of their heights, alternately taking their positions first to the right and then to the left of the tallest one (For example, given five people with their heights 190, 188, 186, 175, and 170, the final formation would be 175, 188, 190, 186, and 170. Here we assume that you are facing the group so your left-hand side is the right-hand side of the one at the central position.);
When there are many people having the same height, they must be ordered in alphabetical (increasing) order of their names, and it is guaranteed that there is no duplication of names.
Now given the information of a group of people, you are supposed to write a program to output their formation.
Input Specification:
Each input file contains one test case. For each test case, the first line contains two positive integers N (≤), the total number of people, and K (≤), the total number of rows. Then N lines follow, each gives the name of a person (no more than 8 English letters without space) and his/her height (an integer in [30, 300]).
Output Specification:
For each case, print the formation -- that is, print the names of people in K lines. The names must be separated by exactly one space, but there must be no extra space at the end of each line. Note: since you are facing the group, people in the rear rows must be printed above the people in the front rows.
Sample Input:
10 3
Tom 188
Mike 170
Eva 168
Tim 160
Joe 190
Ann 168
Bob 175
Nick 186
Amy 160
John 159
Sample Output:
Bob Tom Joe Nick
Ann Mike Eva
Tim Amy John
题意:
拍照的时候需要所给定的要求排列,N个人,站成K排,前K-1排每排站N/K个人,剩下的人全部站在后面的一排。每一排中要求中间位置(M / 2)站个子最高的那个,然后再将剩余的人中个子最高的依次放在这个人的右边和左边,因为拍照的时候我们时正对着他们的,所以在我们看来依次是左边和右边。后排的人一定要比前排的人要高。最后将这些人的名字按照要求输出即可。
思路:
将所有的人先按照个子的高低顺序从高到低排序,如果个子相同则按照名字的字典序进行降序排序。然后进行模拟就好了,当然模拟也不是想到什么就实现什么,也要讲求一定的方法和策略。不然的话代码很容易出错。
Code:
1 #include <bits/stdc++.h>
2
3 using namespace std;
4
5 struct Student {
6 string name;
7 int height;
8 } stu[10005];
9
10 bool cmp(Student a, Student b) {
11 if (a.height == b.height)
12 return a.name < b.name;
13 else
14 return a.height > b.height;
15 }
16
17 int main() {
18 int n, k;
19 cin >> n >> k;
20 for (int i = 0; i < n; ++i) {
21 cin >> stu[i].name >> stu[i].height;
22 }
23 sort(stu, stu+n, cmp);
24 int count = k, m, t = 0;
25 while (count) {
26 if (count == k) {
27 m = n - (n / k) * (k - 1);
28 } else {
29 m = n / k;
30 }
31 vector<Student> ans(m);
32 ans[m/2] = stu[t];
33 int j = m / 2 - 1;
34 for (int i = t + 1; i < t + m; i += 2)
35 ans[j--] = stu[i];
36 j = m / 2 + 1;
37 for (int i = t + 2; i < t + m; i += 2)
38 ans[j++] = stu[i];
39 cout << ans[0].name;
40 for (int i = 1; i < m; ++i)
41 cout << " " << ans[i].name;
42 cout << endl;
43 t += m;
44 count--;
45 }
46 return 0;
47 }
参考:
https://blog.csdn.net/liuchuo/article/details/51985808
1109 Group Photo (25分)的更多相关文章
- 【PAT甲级】1109 Group Photo (25分)(模拟)
题意: 输入两个整数N和K(N<=1e4,K<=10),分别表示人数和行数,接着输入N行每行包括学生的姓名(八位无空格字母且唯一)和身高([30,300]的整数).按照身高逆序,姓名字典序 ...
- 1109. Group Photo (25)
Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...
- PAT (Advanced Level) 1109. Group Photo (25)
简单模拟. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #i ...
- PAT甲题题解-1109. Group Photo (25)-(模拟拍照排队)
题意:n个人,要拍成k行排队,每行 n/k人,多余的都在最后一排. 从第一排到最后一排个子是逐渐增高的,即后一排最低的个子要>=前一排的所有人 每排排列规则如下: 1.中间m/2+1为该排最高: ...
- 1109 Group Photo (25 分)
1109 Group Photo (25 分) Formation is very important when taking a group photo. Given the rules of fo ...
- PAT 1109 Group Photo[仿真][难]
1109 Group Photo(25 分) Formation is very important when taking a group photo. Given the rules of for ...
- 1109 Group Photo
Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...
- PAT 1109 Group Photo
Formation is very important when taking a group photo. Given the rules of forming K rows with N peop ...
- PAT_A1109#Group Photo
Source: PAT A1109 Group Photo (25 分) Description: Formation is very important when taking a group ph ...
随机推荐
- Django模型层2
目录 一.聚合查询 聚合函数 二.分组查询 利用group by进行分组查询 三.F与Q查询 1. F类 2. Q类 四.orm字段及参数 五.自定义char字段 六.orm中的事务操作 1. 什么是 ...
- # PyComCAD介绍及开发方法
项目地址:https://github.com/JohnYang1210/PycomCAD 1.综述 提到Autocad在工业界的二次开发,VB或者Lisp可能作为常用的传统的编程语言.但是,Py ...
- 《C++ Primer》笔记 第2章 变量和基本类型
如果你的数值超过了int表示范围,选用long long 如果你需要使用一个不大的整数,那么明确指定它的类型是signed char或者unsigned char 执行浮点数运算选用double 当一 ...
- POJ-1182(经典带权并查集)
食物链 POJ-1182 一个很好的分析博客:https://blog.csdn.net/niushuai666/article/details/6981689 三种关系:两者同类,吃父节点,被父节点 ...
- 关于 C++ 中的强制转换 - 基础篇
引言 假设有基类 A,包含了虚函数 func1,以及有派生类 B,继承于类 A,派生类 B 中实现了函数 func1.此时可以用 A 类型的指针指向 B 类型的对象,并用 A 类型的指针调用 B 类型 ...
- [Elementary Mechanics-01]Two masses and a spring
[Elementary Mechanics Using Python-01] Question 5.28 Two masses and a spring. Two particles of m = 0 ...
- Go ORM框架 - GORM 踩坑指南
今天聊聊目前业界使用比较多的 ORM 框架:GORM.GORM 相关的文档原作者已经写得非常的详细,具体可以看这里,这一篇主要做一些 GORM 使用过程中关键功能的介绍,GORM 约定的一些配置信息说 ...
- CodeMonkey少儿编程第7章 函数
目标 了解函数是什么 掌握如何定义一个函数 函数是什么 本章我们学习一个新的概念----函数. 你可以简单的将函数看作为一个黑匣子,给它输入参数后,它将会按照一定的规则,执行相应的指令或输出数据. 让 ...
- P1164_小A点菜(JAVA语言)
思路 简单动态规划问题 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点" ...
- Reverse 高校网络信息安全运维挑战赛
Reverse 高校网络信息安全运维挑战赛 1 signed int sub_403CC0() 2 { 3 unsigned int v0; // eax 4 int key_lens; // eax ...