PAT B 1055 集体照(C语言)

2023-11-18

一、题目

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

作者: CHEN, Yue
单位: 浙江大学
时间限制: 400 ms
内存限制: 64 MB
代码长度限制: 16 KB

二、思路

1、求每行人数:

mA=N/K;//每行人数
mB=N/K+N%K;//最后一行人数

2、分组排队
建立一个整形数组B[ K ][ mB ],按照队形,保存拍照人信息数组A[]中的坐标;

    for(int i=0,n=0 ; i<K ; i++)
    //K趟外循环,对应K排
        for(int m= !i ? mB:mA,j=0,pos=m/2,flag=1 ; j<m ; j++,flag*=-1 )
        //pos初始为m/2,是最高的那个人站的位置;
        //m为每排人数;
        //设五个人的身高按降序排序:A[5]={5,4,3,2,1}, m/2=2,最高的人放在B[i][m/2]=A[0]=5;
        //j++并且乘-1,j=-1;第二高的人排在最高的人左边B[i][m/2+j]=A[1]=4;
        //j++并且乘-1,j=2; 第三高的人排在最高的人右边B[i][m/2+j]=A[2]=3;
        //...
        //得到 B[i][]={2,4,5,3,1};
            B[i][ pos+=j*flag ]=n++;//以上是方便理解,B中仅保存A中元素的下标;            

根据B中的下标输出:

    for(int i=0 ; i<K ; i++)
        for(int j=0,m= !i ? mB:mA ; j<m ; j++ )
            printf("%s%s",A[ B[i][j] ].Name  , j<m-1 ? " " : "\n" );

三、代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct
{
    char Name[9];
    int H;
}Data;
int cmp(const void * a,const void * b)
{
    if( (*(Data *)a).H != (*(Data *)b).H )
        return (*(Data *)b).H - (*(Data *)a).H;
    else
        return strcmp( (*(Data *)a).Name , (*(Data *)b).Name );
}
int main()
{
    int N,K,mA,mB;
    scanf("%d %d",&N,&K);
    mA=N/K,mB=N/K+N%K;
    Data A[N];
    int B[K][mB];
    for(int i=0 ; i<N ; i++)
        scanf("%s %d",A[i].Name,&A[i].H);
    qsort(A,N,sizeof(Data),cmp);
    for(int i=0,n=0 ; i<K ; i++)
        for(int m= !i ? mB:mA,j=0,pos=m/2,flag=1 ; j<m ; j++,flag*=-1 )
            B[i][ pos+=j*flag ]=n++;
    for(int i=0 ; i<K ; i++)
        for(int j=0,m= !i ? mB:mA ; j<m ; j++ )
            printf("%s%s",A[ B[i][j] ].Name  , j<m-1 ? " " : "\n" );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PAT B 1055 集体照(C语言) 的相关文章

  • PAT(Basic level)Practice 1012 数字分类 题解

    1012 数字分类 20分 给定一系列正整数 请按要求对数字进行分类 并输出以下 5 个数字 A 1 A 1 A1 能被 5 整除的数字中所有偶数的和 A
  • 1033 旧键盘打字 (20 分)*输入有可能是空串

    旧键盘上坏了几个键 于是在敲一段文字的时候 对应的字符就不会出现 现在给出应该输入的一段文字 以及坏掉的那些键 打出的结果文字会是怎样 输入格式 输入在 2 行中分别给出坏掉的那些键 以及应该输入的文字 其中对应英文字母的坏键以大写给出 每
  • PAT 1072 开学寄语(20)(代码+思路)

    1072 开学寄语 20 分 下图是上海某校的新学期开学寄语 天将降大任于斯人也 必先删其微博 卸其 QQ 封其电脑 夺其手机 收其 ipad 断其 wifi 使其百无聊赖 然后 净面 理发 整衣 然后思过 读书 锻炼 明智 开悟 精进 而
  • PAT乙级 1110 区块反转 (25 分) C++

    1110 区块反转 25 分 给定一个单链表 L 我们将每 K 个结点看成一个区块 链表最后若不足 K 个结点 也看成一个区块 请编写程序将 L 中所有区块的链接反转 例如 给定 L 为 1 2 3 4 5 6 7 8 K 为 3 则输出应
  • PAT乙级1032题解

    题目详情 1032 挖掘机技术哪家强 20 分 为了用事实说明挖掘机技术到底哪家强 PAT 组织了一场挖掘机技能大赛 现请你根据比赛结果统计出技术最强的那个学校 输入格式 输入在第 1 行给出不超过 10的 5次方的正整数 N 即参赛人数
  • 1001 害死人不偿命的(3n+1)猜想 (15 分)

    卡拉兹 Callatz 猜想 对任何一个正整数 n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到 n 1 卡拉兹在 1950 年的世界数学家大会上公布了这个猜想 传说当时
  • PAT 乙级 1035 插入与归并 (C语言)

    题目 根据维基百科的定义 插入排序是迭代算法 逐一获得输入数据 逐步产生有序的输出序列 每步迭代中 算法从输入序列中取出一元素 将之插入有序序列中正确的位置 如此迭代直到全部元素有序 归并排序进行如下迭代操作 首先将原始序列看成 N 个只包
  • PAT乙级 1001 害死人不偿命的(3n+1)猜想 (15分)

    PAT乙级 1001 害死人不偿命的 3n 1 猜想 15分 卡拉兹 Callatz 猜想 对任何一个正整数 n 如果它是偶数 那么把它砍掉一半 如果它是奇数 那么把 3n 1 砍掉一半 这样一直反复砍下去 最后一定在某一步得到 n 1 卡
  • PAT Basic Level 1045 快速排序(思维)

    题目链接 点击查看 题目描述 著名的快速排序算法里有一个经典的划分过程 我们通常采用某种方法取一个元素作为主元 通过交换 把比主元小的元素放到它的左边 比主元大的元素放到它的右边 给定划分后的 N 个互不相同的正整数的排列 请问有多少个元素
  • PAT B1072 开学寄语

    算法思想 用数组标记应要查缴的物品mark 物品编号 1 在输入学生信息的同时判断该物品是否要查缴 因格式问题用了另一个数组保存该学生要查缴的物品编码 最后再输出该学生的名字和查缴物品编号 后来看了柳神的代码 不用这么麻烦 直接在输出前加括
  • PAT乙级 1010 一元多项式求导 (25分)

    1010 一元多项式求导 25分 设计函数求一元多项式的导数 注 x n n为整数 的一阶导数为nxn 1 输入格式 以指数递降方式输入多项式非零项系数和指数 绝对值均为不超过 1000 的整数 数字间以空格分隔 输出格式 以与输入相同的格
  • PAT B1016 部分A+B (15 分)(C语言实现)

    PAT B1016 部分A B 15 分 C语言实现 问题描述 正整数 A 的 D A 为 1 位整数 部分 定义为由 A 中所有 D A 组成的新整数 P A 例如 给定 A 3862767 D A 6 则 A 的 6 部分 P A 是
  • Python3 爬取PAT个人乙级题所有答案代码

    Python3 爬取PAT个人乙级题所有答案 进入PAT乙级题题目页面 下面是链接 https pintia cn problem sets 994805260223102976 problems type 7 点开两个题目 观察两个链接有
  • PAT乙级1052 卖个萌 (20 分)测试点123

    https pintia cn problem sets 994805260223102976 problems 994805273883951104 测试点0 Are you kidding me 中 为转义字符 要用双 表示 测试点1
  • 1001. 害死⼈不偿命的(3n+1)猜想(15分)

    害死 不偿命的 3n 1 猜想 15分 卡拉兹 Callatz 猜想 对任何 个 然数n 如果它是偶数 那么把它砍掉 半 如果它是奇数 那么把 3n 1 砍掉 半 这 样 直反复砍下去 最后 定在某 步得到n 1 卡拉兹在1950年的世界数
  • PAT 乙级 1033 旧键盘打字 python

    题目 思路 因为坏键盘的输入是大写字母 遍历输入的字符 将输入字母的字符转换为大写 与坏键盘对比 如果 坏掉 当字母字符不在坏键盘之列 则是小写时 字符才能输出 代码 import sys bad key sys stdin readlin
  • PAT乙级 1029旧键盘 python

    题目 思路 将输入与输出逐位对比 将不相等的记录下来即可 代码 input input print input bad key 记录坏掉的键盘 upper 将所有小写字符转为大写 lower 将所有大写转为小写 print position
  • PAT 1011 A+B 和 C

    给定区间 2 31 2 31 内的 3 个整数 A B 和 C 请判断 A B 是否大于 C 注意本题数字的范围 是 2 31 2 31 因此要用long long 类型 刚开始用了int 类型 一直提示有错误 注意int 32位 可以包括
  • PAT乙级(Bascic Level)1037(C++)

    1037 在霍格沃茨找零钱 20 如果你是哈利 波特迷 你会知道魔法世界有它自己的货币系统 就如海格告诉哈利的 十七个银西可 Sickle 兑一个加隆 Galleon 二十九个纳特 Knut 兑一个西可 很容易 现在 给定哈利应付的价钱P和
  • PAT B 1055 集体照(C语言)

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

随机推荐

  • 图像处理——边缘检测

    边缘检测 一 边缘检测的目的 二 边缘检测算子有哪些 三 Canny算子 3 1 简述Canny算子 3 2 简述下Canny的计算过程 四 sobel算子 4 1 简述一下sobel算子 五 深度学习下的边缘检测 5 1 HED 整体嵌套
  • opencv-基于颜色的目标检测(含代码)

    先推荐下自己的公众号 Joe学习笔记 公众号上会不定期更新一些文章 主要是自己平时学到的知识 内容包括自动驾驶 计算机视觉 人工智能和机器人技术 我会第一时间把文章更新在公众号上 欢迎大家订阅和分享 文章是从公众号搬过来的 邀请朋友在公众号
  • 带你三分钟了解算力

    导读 数字经济时代 算力是新生产力 是支撑数字经济发展的坚实基础 加快发展算力 是我国打造数字经济新优势 构建 双循环 新发展格局 提升国家整体竞争力的重要保障 一 何为算力 算力是设备通过处理数据 实现特定结果输出的计算能力 常用FLOP
  • abp去掉AbpUser中的Name,Surname

    abp是国外的框架 默认的框架中的AbpUser表中的Name和Surname是分开的 这不符合国情 可以先去掉 1 在User类中重写Name和Surname 并设置为私有 2 在DbContext类中 重写OnModelCreating
  • 使用ThreadPoolTaskExecutor解决高并发性的问题

    ThreadPoolTaskExecutor 使用ThreadPoolTaskExecutor解决高并发性的问题 1 创建一个ThreadPoolTaskExecutor 2 往线程里面添加FutureTask对象 3 然后等待Future
  • VMware虚拟机扩容 磁盘分配过慢 直接添加物理磁盘 挂载ntfs mount: unknown filesystem type ‘ntfs’解决办法

    场景描述 在VMware虚拟机的使用过程中 有一些较大的文件需要存储 准备给虚拟机扩容 宿主机有一块机械硬盘 已格式化为两个ntfs格式的分区 我们准备用第二个分区给虚拟机扩容 且分区中已经存有文件 备份文件和虚拟机分配磁盘空间 这两个步骤
  • darknet+yolo4的windows下图片验证码识别一:环境编译和运行

    原创来自本人的公众号 阿嚏个技术 公众号文章地址 darknet yolo4的windows下图片验证码识别 之一 环境编译和运行 目前有很多采取深度学习的方式 进行图片验证码的文字识别 然后实现打码功能 本文采用darknet yolo4
  • Linux服务篇-FTP-文件传输协议

    一 FTP 文件传输协议 1 介绍 FTP服务器 File Transfer Protocol Server 是在互联网上提供文件存储和访问服务的计算机 它们依照FTP协议提供服务 是 TCP IP 协议组中的协议之一 FTP是用来传输文件
  • 【实战】淘宝电商用户行为分析——SQL

    目录 一 项目背景 1 1分析目的 1 2分析思路 二 数据来源 清洗 2 1数据集介绍 2 2数据清洗 2 2 1 检查是否存在重复值 2 2 2 检查是否存在缺失值 2 2 3 一致化处理 对timestamp 2 2 4异常值处理 时
  • 微信小程序使用setData方法修改data中对象或数组的属性值

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 微信小程序使用setData方法修改data中对象或数组的属性值 使用微信小程序开发时 涉及到data的修改一般使用微信官方推荐的setDat
  • mysql读写分离(mysql-proxy-0.85)

    读写分离代理172 25 11 1 主 172 25 11 2 从库172 25 11 3 从库172 25 11 4 proxy端 代理端 yum install y gcc gcc c autoconf automake zlib li
  • 脱机使用计算机,电脑设备变成脱机状态的解决办法

    计算机网络信息的发展是一把双刃剑 虽然为人们的生活带来很大的方便 但是其中隐含的计算机网络信息安全问题是不可忽视的 近些年来计算机网络信息安全频频受损 影响了人们日常生活 下面是小编为大家整理的关于 一起来看看吧 1 首先要检查你的网络是否
  • 每日小练习 ——《计算布尔表达式的值》LeetCode Plus 会员专享题【详细解析】Hive / MySQL

    大家早上好 本人姓吴 如果觉得文章写得还行的话也可以叫我吴老师 欢迎大家跟我一起走进数据分析的世界 一起学习 感兴趣的朋友可以关注我的数据分析专栏 里面有许多优质的文章跟大家分享哦 另外也欢迎大家关注我的SQL刷题专栏 里面有我分享的高质量
  • 开源的AI算法可以进行物体识别,动物识别

    有许多开源的AI算法可以进行物体识别和动物识别 其中最常用的算法是深度学习中的卷积神经网络 Convolutional Neural Network CNN 如Google开源的Inception和ResNet模型 以及Facebook开源
  • Java VS Python各自在AI人工智能领域的应用前景

    目前AI领域应用最广泛的开发语言是Python Python在过去几年里在人工智能和机器学习领域取得了巨大的成功和普及 有几个原因使得Python成为AI开发的首选语言 丰富的库和框架 Python拥有许多专门用于AI和机器学习的优秀库和框
  • STM32学习笔记

    GPIO 通用输入输出口 所有GPIO口都是挂载在APB2外设总线上 GPIO外设名称按照GPIOA GPIOB GPIOC来命名 每个GPIO外设有16个引脚 0 15 GPIOA的第0号引脚称作PA0 八种输入输出模式 1 浮空输入 可
  • 去除快捷方式箭头BAT脚本

    去除快捷方式箭头BAT脚本 1 脚本功能 去除window电脑桌面图标右下角的快捷方式小箭头 对于强迫症患者绝对是福音 总之清除了之后非常的舒畅 2 脚本内容 echo off color 2 reg delete HKCR lnkfile
  • Knowledge Distillation and Student-Teacher Learning for Visual Intelligence

    本文是蒸馏学习综述系列的第四篇文章 Knowledge Distillation and Student Teacher Learning for Visual Intelligence A Review and New Outlooks的
  • C89和C99标准比较

    1 增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符 它是初始访问指针所指对象的惟一途径 因此只有借助restrict指针表达式才能访问对象 restrict指针指针主要用做函数变元 或者指向由malloc
  • PAT B 1055 集体照(C语言)

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