1055. 集体照 (25)

来源:互联网 发布:电脑绘画卡通人物软件 编辑:程序博客网 时间:2024/06/01 14:11

挺好的一道题。题目虽小,考察的知识点挺多,字符串处理,自定义排序,双端队列。
语法积累:
1.自定义排序:

bool mysort(node a, node b){    if (a.high!=b.high) return a.high>b.high;    int t = strcmp(a.name, b.name);    return t<0;//按字典顺组升序}

2.双端队列deque:
Constructors 创建一个新双向队列
Operators 比较和赋值双向队列
assign() 设置双向队列的值
at() 返回指定的元素
back() 返回最后一个元素
begin() 返回指向第一个元素的迭代器
clear() 删除所有元素
empty() 返回真如果双向队列为空
end() 返回指向尾部的迭代器
erase() 删除一个元素
front() 返回第一个元素
get_allocator() 返回双向队列的配置器
insert() 插入一个元素到双向队列中
max_size() 返回双向队列能容纳的最大元素个数
pop_back() 删除尾部的元素
pop_front() 删除头部的元素
push_back() 在尾部加入一个元素
push_front() 在头部加入一个元素
rbegin() 返回指向尾部的逆向迭代器
rend() 返回指向头部的逆向迭代器
resize() 改变双向队列的大小
size() 返回双向队列中元素的个数
swap() 和另一个双向队列交换元素

// 2017/10/14 NCU // PAT-B 1055// scienceZ#include <cstdio>#include <cstring>#include <deque>#include <iostream>#include <algorithm>using namespace std;struct node{    char name[10];    int high;};node arr[10010];int n, k, p, q, z;deque<char*> ans;bool mysort(node a, node b){    if (a.high!=b.high) return a.high>b.high;    int t = strcmp(a.name, b.name);    return t<0;}void read(){    for (int i = 0; i<n; i++){        cin >> arr[i].name >> arr[i].high;    }    return;}int main(){    cin >> n >> k;    read();    sort(arr, arr+n, mysort);    p = n/k;    for (int i = 0; i<k; i++){        if (i == 0) q = p + n%k;        else q = p;        for (int j = 0; j<q; j++){            if (j%2) ans.push_front(arr[z].name);            else ans.push_back(arr[z].name);            z++;        }        while(!ans.empty()){            if (ans.size() == 1) printf("%s\n", ans.front());            else printf("%s ", ans.front());            ans.pop_front();        }    }    return 0;}