1109 Group Photo(40行代码+超详细注释+题目分析,双端队列实现)

这篇具有很好参考价值的文章主要介绍了1109 Group Photo(40行代码+超详细注释+题目分析,双端队列实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分数 25

全屏浏览题目

切换布局

作者 CHEN, Yue

单位 浙江大学

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 N/K (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 (m/2+1), 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 (≤104), the total number of people, and K (≤10), 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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

题目分析:

Bob Tom Joe Nick          175 188 190 186
Ann Mike Eva                  168 170 168
Tim Amy John                 160 160 159

题目所给的排列顺序是观众面对舞台,假设观众在很高的地方观看,从上往下看的视角所看到的排列顺序。

从观众视角进行排序,这里以最后一排为第一排,先把最高的人入队(若一样高则入队字典序排前的),然后左边站一个人,右边站一个人,排完一排再排下一排

#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int n,k;
struct people{
    string name;
    int height;
}p[N];
bool cmp(people a,people b){//按身高从大到小排序,相同身高按字典序排序 
    return a.height!=b.height?a.height>b.height: a.name<b.name;
}
int main(){
    cin>>n>>k;
    for(int i=0;i<n;i++)cin>>p[i].name>>p[i].height;//输入 
    sort(p,p+n,cmp);//排序 
    deque<string>q[k+1];//双端队列 
    int extra=n%k,rownum=(n-extra)/k;//extra表示多余人数,rownum表示除了最后一个排的每排人数 
    int cur;//记录当前是第几个人 
    for(cur=0;cur<rownum+extra;cur++){//将最后一排视作第一排,先插到队列里 
        if(cur%2==0)q[1].push_back(p[cur].name);//按照第一个在队尾入队,第二个在队头入队的顺序入队,交替队尾队头的入队 
        else q[1].push_front(p[cur].name);
    }
    for(int row=2;row<=k;row++){//从第二排开始插入 
        int cnt=0;//记录当前排插入的人数 
        while(cnt<rownum){//人数小于该排能插入的人数则循环 
            if(cnt%2==0)q[row].push_back(p[cur++].name);//同第一排的插法 
            else q[row].push_front(p[cur++].name);
            cnt++;//每次插完该排人数+1 
        }
    }
    for(int i=1;i<=k;i++){//遍历k排进行输出 
        int flag=0;//用来防止行末空格 
        for(auto it:q[i]){//对于第i排 
            if(flag==0)flag=1,cout<<it;//第一个人都是直接输出 
            else cout<<' '<<it;//后面的每个人都要先输出个空格 
        }  
        cout<<endl;//一排输完后输出回车 
    }
    return 0;
}
文章来源地址https://www.toymoban.com/news/detail-471883.html

到了这里,关于1109 Group Photo(40行代码+超详细注释+题目分析,双端队列实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DenseNet代码复现+超详细注释(PyTorch)

    关于DenseNet的原理和具体细节,可参见上篇解读:经典神经网络论文超详细解读(六)——DenseNet学习笔记(翻译+精读+代码复现) 接下来我们就来复现一下代码。 整个DenseNet模型主要包含三个核心细节结构,分别是 DenseLayer (整个模型最基础的原子单元,完成一次最基础的

    2023年04月23日
    浏览(52)
  • ResNet代码复现+超详细注释(PyTorch)

    关于ResNet的原理和具体细节,可参见上篇解读:经典神经网络论文超详细解读(五)——ResNet(残差网络)学习笔记(翻译+精读+代码复现) 接下来我们就来复现一下代码。 源代码比较复杂,感兴趣的同学可以上官网学习:  https://github.com/pytorch/vision/tree/master/torchvision 本

    2024年02月11日
    浏览(42)
  • ResNeXt代码复现+超详细注释(PyTorch)

    ResNeXt就是一种典型的混合模型,由基础的Inception+ResNet组合而成,本质在gruops分组卷积,核心创新点就是用一种平行堆叠相同拓扑结构的blocks代替原来 ResNet 的三层卷积的block,在不明显增加参数量级的情况下提升了模型的准确率,同时由于拓扑结构相同,超参数也减少了,便

    2024年02月15日
    浏览(50)
  • 【算法】顺时针打印矩阵(图文详解,代码详细注释

    目录 题目 代码如下: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则打印出数字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 这一道题乍一看,没有包含任何复杂的数据结构和高级算法,似乎蛮简单的。但

    2024年04月26日
    浏览(37)
  • 1146 Topological Order(31行代码+详细注释)

    分数 25 全屏浏览题目 作者 CHEN, Yue 单位 浙江大学 This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topological order obtained from the given directed graph? Now you are supposed to write a program to test each of the options. Input Specification: Each input file contains one test case. For each

    2024年02月06日
    浏览(77)
  • 非极大值抑制详细原理(NMS含代码及详细注释)

    作者主页: 爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,活动领域博主 爱笑的男孩。擅长深度学习,YOLO,活动,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域. https://blog.csdn.net/Code_and516?type=collect 个人介绍:打工人。 分享内容

    2023年04月21日
    浏览(55)
  • 白盒测试(5-8道题目+详细代码)

    题 5:根据下列流程图编写程序实现相应分析处理,并设计测试数据进行判定覆盖测试。输入数据打印出“输入 a 值:”、“输入 b 值:”。x 执行结果输出文字“x 的值:”和 x 的值,y 执行结果输出文字“y 的值:”和 y 的值;z 执行结果输出文字“z 的值:”和 z 的值。其中变

    2024年02月16日
    浏览(55)
  • 白盒测试(17-20道题目+详细代码)

    题 17: 根据输入的年份和月份判断月份的天数,并设计测试数据进行语句覆盖测试。若月份不在有效范围之内,应提示:“月份输入不正确。”。月份不为 2 月,根据输入月份输出对应的月份天数。月份为 2 月,根据年份判断如为闰年,输出 2 月份正确天数;不为闰年输出

    2024年02月12日
    浏览(77)
  • 白盒测试(1-4道题目+详细代码)

    题 1:根据输入执行下列不同的数学计算并显示结果。编写程序,并设计测试数据进行语句覆盖测试。输入数据打印出“输入 x 值:”、“输入 k 值:”。 执行算式一log( x *   k ) 输出文字“算式一值:”和 y 的值,执行 k x 输出文字“算 式二值:”和 y 的值;执行 x k 输出文字

    2023年04月09日
    浏览(35)
  • 五子棋小游戏 java版(代码+详细注释)

    游戏展示         这周闲来无事,再来写个五子棋小游戏。基本功能都实现了,包括人人对战、人机对战。界面布局和功能都写的还行,没做到很优秀,但也不算差。如有需要,做个java初学者的课程设计或者自己写着玩玩也都是不错的(非常简单,小白照着就能写出来)。

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包