• 1109 Group Photo (25 分)


    先定义结构图node{name, height},存放姓名和身高。先将所有人按照身高顺序从大到小排好序(因为从最后一排开始输出,最后一排身高最高,所以刚好是从头开始处理),再分组处理,除了最后一排人数是n/k+n%k,其余排的人数均为n/k,引入formation函数,用下标作为参数给出处理范围(下标或范围可由每排人数递推出),逐排处理即可。

    需要注意的是formation函数里面的person函数存储数据的下标是[1,size],因为题目的pos=m/2+1的条件就是按这一存储方式给的,若使用[0,size)作为下标则会出错。

    注意判断的条件,不让下标越界。

     1 #pragma warning(disable:4996)
     2 #define _CRT_SECURE_NO_WARNINGS
     3 
     4 #include <iostream>
     5 #include <algorithm>
     6 #include <cmath>
     7 #include <vector>
     8 #include <map>
     9 #include <set>
    10 #include <unordered_set>
    11 #include <unordered_map>
    12 #include <queue>
    13 #include <cmath>
    14 #include <string>
    15 #define INFINITE 65535
    16 #define mod 1000000007
    17 using namespace std;
    18 struct node
    19 {
    20     string name;
    21     int h;
    22 };
    23 bool cmp(node a, node b)
    24 {
    25     return a.h!=b.h ? a.h > b.h : a.name < b.name;
    26 }
    27 vector<node> v(10000);
    28 int n, k;
    29 void formation(int s, int e)
    30 {
    31     int sz = e - s + 1;
    32     vector<node> person(sz+1);//[1,n]下标范围
    33     int mid = sz / 2 + 1;
    34     person[mid] = v[s];
    35     int i = s + 1;
    36     int cnt = 1;
    37     while (i <= e)
    38     {
    39         if (mid - cnt >= 1)
    40             person[mid - cnt] = v[i];
    41         if (i + 1 <= e && mid + cnt <= sz)
    42             person[mid + cnt] = v[i + 1];
    43         i += 2;
    44         ++cnt;
    45     }
    46     for (int i = 1; i <= sz; ++i)
    47     {
    48         if (i != 1) cout << " ";
    49         cout << person[i].name;
    50     }
    51     cout << endl;
    52 }
    53 int main()
    54 {    
    55     cin >> n >> k;
    56     for (int i = 0; i < n; ++i)
    57     {
    58         cin >> v[i].name >> v[i].h;
    59     }
    60     sort(v.begin(), v.end(), cmp);
    61 
    62     formation(0, n / k + n % k - 1);
    63     for (int i = n / k + n % k; i < n; i += n / k)
    64         formation(i, i + n / k - 1);
    65 
    66     return 0;
    67 }
  • 相关阅读:
    js实现多物体运动框架并兼容各浏览器
    JAVA-day08 下午-总结、測试
    更改Android应用程序的图标
    codeforces #296 div2 (527C) STL中set的运用
    曼昆微观经济学之征税的市场本质—冰激凌篇
    POJ 1789:Truck History(prim&amp;&amp;最小生成树)
    Android:Activity+Fragment及它们之间的数据交换(一)
    滴滴拉屎之后是什么?
    tmux安装
    IOS开发——Core Graphics &amp; Core Animation
  • 原文地址:https://www.cnblogs.com/2020R/p/14464297.html
Copyright © 2020-2023  润新知