• UVA 11462 Age Sort(计数排序法 优化输入输出)


    Age Sort

    You are given the ages (in years) of all people of a country with at least 1 year of age. You know that no individual in that country lives for 100 or more years. Now, you are given a very simple task of sorting all the ages in ascending order.

    Input

    There are multiple test cases in the input file. Each case starts with an integer (0<n<=2000000), the total number of people. In the next line, there are integers indicating the ages. Input is terminated with a case where = 0. This case should not be processed.

    Output

    For each case, print a line with space separated integers. These integers are the ages of that country sorted in ascending order.

    Warning: Input Data is pretty big (~  25 MB) so use faster IO.

    Sample Input

    5

    3 4 2 1 5

    5

    2 3 2 3 1

    0

    Output for Sample Input

    1 2 3 4 5

    1 2 2 3 3

    题目大意:给定若干居民的年龄(都是1-100之间的整数),把他们按照从小到大的顺序输出。

    分析:年龄排序。由于数据太大,内存限制太紧(甚至都不能把他们全部读进内存),因此无法使用快速排序方法。但整数范围很小,可以用计数排序法。

    代码如下:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cctype> // 为了使用isdigit宏
     4 
     5 inline int readint() {
     6   char c = getchar();
     7   while(!isdigit(c)) c = getchar();
     8 
     9   int x = 0;
    10   while(isdigit(c)) {
    11     x = x * 10 + c - '0';
    12     c = getchar();
    13   }    
    14   return x;
    15 }
    16 
    17 int buf[10]; // 声明成全局变量可以减小开销
    18 inline void writeint(int i) {
    19   int p = 0;
    20   if(i == 0) p++; // 特殊情况:i等于0的时候需要输出0,而不是什么也不输出
    21   else while(i) {
    22     buf[p++] = i % 10;
    23     i /= 10;
    24   }
    25   for(int j = p-1; j >=0; j--) putchar('0' + buf[j]); // 逆序输出
    26 }
    27 
    28 int main() {
    29   int n, x, c[101];
    30   while(n = readint()) {
    31     memset(c, 0, sizeof(c));
    32     for(int i = 0; i < n; i++) c[readint()]++;
    33     int first = 1;
    34     for(int i = 1; i <= 100; i++)
    35       for(int j = 0; j < c[i]; j++) {
    36         if(!first) putchar(' ');
    37         first = 0;
    38         writeint(i);
    39       }
    40     putchar('
    ');
    41   }
    42   return 0;
    43 }
  • 相关阅读:
    Codeforces 525C Om Nom and Candies 枚举 + 复杂度分析
    Codeforces 526B Om Nom and Dark Park 树形dp
    Codeforces 526A King of Thieves 枚举
    Regionals 2014 Asia
    Regionals 2014 Asia
    access数据库和sqlsever数据库sql语句的布尔值boolean的写法
    取消阴影行
    引用其他单元的2种方法
    选中阴影行
    全选
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/3202744.html
Copyright © 2020-2023  润新知