PAT乙级1055 集体照
拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下:
每排人数为 N/K(向下取整),多出来的人全部站在最后一排;
后排所有人的个子都不比前排任何人矮;
每排中最高者站中间(中间位置为 m/2+1,其中 m 为该排人数,除法向下取整);
每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、175、170,则队形为175、188、190、186、170。这里假设你面对拍照者,所以你的左边是中间人的右边);
若多人身高相同,则按名字的字典序升序排列。这里保证无重名。
现给定一组拍照人,请编写程序输出他们的队形。
输入格式:
每个输入包含 1 个测试用例。每个测试用例第 1 行给出两个正整数 N(≤104,总人数)和 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
思路:
1.先注意审题,是给了K行,不是每行K个人,当时想当然的以为,结果还通过了三个是最骚的,查错花了些时间,无语,细心啊,同志们
2.这就简单了,先用一个vector把数据装着,然后按题目要求来个总排序
3.再创建一个二维vector,vector数组的二维使用最好要熟练,每行用来记录排队状况,最后输出这个二维数组就行了,具体看代码吧,注释的应该算很清楚了
具体看代码
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
struct student{string name;int height;
};
bool cmp(student A, student B){if (A.height != B.height){return A.height > B.height;}else{return A.name < B.name;}
}
int main()
{int N, K, indexz, indexf, per = 0,min,mid,k=0;cin >> N >> K;vector<student> students(N);vector<vector<student>>queue;//拍照的队列最终结果用二维数组保存,初始化大小要注意for (int i = 0; i < N; i++){cin >> students[i].name;cin >> students[i].height;}sort(students.begin(), students.end(), cmp);//先来个总排序,身高,名字queue.resize(K);//vector二位数组的 行 大小声明,per = N / K;//计算出每行的人数for (int i = K; i >= 1; i--){if (i == K){//最后一行的人数站多少要单独处理min = N - (K - 1)*per;}else{min = per;//其他行的不用}queue[K - i].resize(min);//二维数组的列大小分配,也就是每一个verctor的大小动态分配indexz = 0, indexf = 0;//用来标记mid前后的站队标记mid = min / 2;for (int j = 0; j < min; j++){if (j == 0){queue[K-i][mid] = students[k++];//students里的数据已经拍好序所以放心用,第一个元素必然为最大值continue;}if (j % 2 != 0){indexf--;queue[K - i][mid + indexf] = students[k++];}else{indexz++;queue[K - i][mid + indexz] = students[k++];}}}for (int i = 0; i < K; i++){ //输出for (int j = 0; j < queue[i].size(); j++){if (j != 0)cout << " ";//格式控制空格的输出cout << queue[i][j].name;}cout << endl;}return 0;
}
PAT乙级1055 集体照相关推荐
- C++学习之路 | PTA乙级—— 1055 集体照 (25 分)(精简)
1055 集体照 (25 分) 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任 ...
- 浙大 PAT 乙级1055
#include<stdio.h> struct stu{char name[4];int a; }s[10005]; int main(){int m,n,k;scanf("% ...
- PAT乙级题目索引(题目+解析+AC代码)
题目信息 分值 PAT 乙级 1001 害死人不偿命的(3n+1)猜想 15 PAT 乙级 1002 写出这个数 20 PAT 乙级 1003 我要通过! 20 PAT 乙级 1004 成绩排名 20 ...
- PAT乙级刷题之路1055 集体照 (25分)
1055 集体照 (25分) 拍集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下: 每排人数为 N/K(向下取整),多出来的人全部站在最后一排: 后排所有人的个子都不比前排任何 ...
- 【PTA】 PAT乙级真题,95题(C++,AC代码)
PAT乙级真题95题 标号 标题 分数 通过数 提交数 通过率 1001 害死人不偿命的(3n+1)猜想 15 109558 309119 0.35 1002 写出这个数 20 71739 28156 ...
- PAT乙级【1051~1095】
1051 复数乘法 (15分) 复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i2=−1:也可以写成极坐标下的指数形式 (R×e(Pi)),其中 R 是复 ...
- PAT乙级题库踩坑实录
PAT乙级题库踩坑实录 [截止2021.7.28乙级题库已经全部AC] 题目名称: 1030 完美数列 (25 分) 测试点3踩坑 每次取m后,不用从m后第一个元素开始判断是否大于mp,直接从m后第m ...
- PAT乙级题目对应知识点分类梳理例程(更新至1102)
PAT乙级题目对应知识点分类梳理 PAT乙级的90道题的知识点与对应的题号整理如下,便于做专项练习和巩固! 题型 备注 1.字符串函数 考察字符串相关知识,如逆转.字母与数字的判断与转化.字符串拼接. ...
- 【Java】PAT乙级真题全记录(三)41到60题
PAT乙级41到60题练习代码全纪录 1041 考试座位号 1042 字符统计 1043 输出PATest 1044 火星数字 1045 快速排序(1.3.4.5测试点运行超时) 1046 划拳 10 ...
- 1055. 集体照 (25)
1055. 集体照 (25) 时间限制 400 ms 内存限制 65536 kB 乙级练习题解目录 拍集体照时队形很重要,这里对给定的N个人K排的队形设计排队规则如下: 每排人数为N/K(向下取整) ...
最新文章
- 1112: 零起点学算法19——输出特殊值
- cambridge official online course store
- Java虚拟机(JVM)的内存划分
- mfc中UpdateData的用法
- leetcode —— 面试题 17.08. 马戏团人塔
- hibernate dynamic-update=true属性不起作用原因(转载)
- win11间歇性卡顿怎么办 windows11间歇性卡顿的解决方法
- java mime上传_JavaWeb中实现文件上传的方式有哪些?
- 避免无法预知和依赖于实现环境的行为
- mysql order by if函数_mysql order by
- MySQL 数据库性能优化之缓存参数优化
- dos命令大全 基础命令+网络的常用命令
- 用Python制作一个自动抢票脚本
- 【CSS】制作ICO图标
- 谋定信博会入政府规划-赵洪涛:易华录经信研究大数据
- Unity中如何跟随某个物体运动浅谈
- HTML5重要知识点
- Python机器学习:Sklearn快速入门(稍微懂一些机器学习内容即可)
- 【考研初试】复习规划以及推荐资料/老师
- RN入门基础1:第一个RN项目-hello World
热门文章
- 局域网中的通信子网和资源子网
- com.alibaba.druid.sql.parser.ParserException: syntax error, QUES %,
- 批量替换角标,为角标添加中括号
- 工业互联网(十三)——工业相机相关知识(初学者必备)
- Python应用|绘制任意正态分布曲线
- 【托业】【新托业TOEIC新题型真题】学习笔记1--题库一--P1~4
- vmware设置固定ip
- DMZ区域的作用与原理
- matepadpro升级鸿蒙,鸿蒙OS下月推出!MatePad Pro升级EMUI 11,提前预演
- 【FreeSwitch开发实践】使用SIP客户端Yate连接FreeSwitch进行VoIP通话