zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Set.prototype (Set) – JavaScript 中文开发手册
    wordpress插件 : 利用Max Mega Menu实现二级菜单的伸缩
    HTML textarea placeholder 属性
    Number.parseInt (Number) – JavaScript 中文开发手册
    Java 实例 – 获取 URL响应头的日期信息
    PHP date_default_timezone_set() 函数
    SIMD.fromInt32x4Bits (SIMD) – JavaScript 中文开发手册
    使用 mysql_random_data_load 生成随机数据
    python基本数据类型
    day02代码
  • 原文地址:https://www.cnblogs.com/2020R/p/14464297.html
Copyright © 2011-2022 走看看