zoukankan      html  css  js  c++  java
  • 【PAT甲级】1109 Group Photo (25分)(模拟)

    题意:

    输入两个整数N和K(N<=1e4,K<=10),分别表示人数和行数,接着输入N行每行包括学生的姓名(八位无空格字母且唯一)和身高(【30,300】的整数)。按照身高逆序,姓名字典序升序将学生从高到矮排列,将学生均分为N行输出,最先输出的一行人数包括除不尽的余数学生,每行中间(如果这一行学生人数为偶数则靠右的为中间)的学生最高,然后依次左边一位学生最高,右边一位学生最高,例如190, 188, 186, 175, 170->175, 188, 190, 186, 170。

    trick:

    把K看成了每行的学生个数而不是行数(竟然能过前三个数据点)。。。。。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 pair<int,string>pr[10007];
     5 bool cmp(pair<int,string>a,pair<int,string>b){
     6     if(a.first!=b.first)
     7         return a.first<b.first;
     8     return a.second>b.second;
     9 }
    10 string ans[10007];
    11 int main(){
    12     ios::sync_with_stdio(false);
    13     cin.tie(NULL);
    14     cout.tie(NULL);
    15     int n,k;
    16     cin>>n>>k;
    17     for(int i=1;i<=n;++i)
    18         cin>>pr[i].second>>pr[i].first;
    19     sort(pr+1,pr+1+n,cmp);
    20     int m=n;
    21     int x=n-n/k*k+n/k;
    22     int cnt=x;
    23     int temp=0;
    24     int t=0;
    25     int flag=-1;
    26     while(cnt--){
    27         ans[x/2+1+temp]=pr[m--].second;
    28         if(flag<0)
    29             ++t;
    30         temp=t*flag;
    31         flag=-flag;
    32     }
    33     int num=x;
    34     for(int i=1;i<k;++i){
    35         int cnt=n/k;
    36         int temp=0;
    37         int t=0;
    38         int flag=-1;
    39         while(cnt--){
    40             ans[num+n/k/2+1+temp]=pr[m--].second;
    41             if(flag<0)
    42                 ++t;
    43             temp=t*flag;
    44             flag=-flag;
    45         }
    46         num+=n/k;
    47     }
    48     for(int i=1;i<=x;++i){
    49         cout<<ans[i];
    50         if(i<x)
    51             cout<<" ";
    52         else
    53             cout<<"
    ";
    54     }
    55     for(int i=x+1;i<=n;++i){
    56         cout<<ans[i];
    57         if((i-x)%(n/k))
    58             cout<<" ";
    59         else if(i<n)
    60             cout<<"
    ";
    61     }
    62     return 0;
    63 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    Systemd 入门教程:实战篇
    Docker 1.12.0将要发布的新功能
    ubuntu 11.10 安装apache2 tomcat6
    DNS 原理入门
    c# 日志记录 行号
    WIN7系统插入蓝牙适配器经常断开问题
    iphone手机与PC蓝牙出现感叹号且无法修复解决方案
    未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出
    虚拟机如何设置U盘启动项
    Resharper 8.2 注册码
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12267290.html
Copyright © 2011-2022 走看看