B |
Age Sort Input: Standard Input Output: Standard Output |
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 n (0<n<=2000000), the total number of people. In the next line, there are n integers indicating the ages. Input is terminated with a case where n = 0. This case should not be processed.
Output
For each case, print a line with n 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 Output for Sample Input
5 3 4 2 1 5 5 2 3 2 3 1 0 |
1 2 3 4 5 1 2 2 3 3 |
Note: The memory limit of this problem is 2 Megabyte Only.
Problem Setter: Mohammad Mahmudur Rahman
Special Thanks: Shahriar Manzoor
题意:给定一些年龄(1-100)去排序输出。
思路:由于不让开很大的数组。那就进行计数排序。加个输入外挂能优化时间。
代码:
#include <stdio.h> #include <string.h> const int N = 105; int n, vis[N]; int Scan() { int res = 0, ch, flag = 0; if((ch = getchar()) == ‘-‘) //判断正负 flag = 1; else if(ch >= ‘0‘ && ch <= ‘9‘) //得到完整的数 res = ch - ‘0‘; while((ch = getchar()) >= ‘0‘ && ch <= ‘9‘ ) res = res * 10 + ch - ‘0‘; return flag ? -res : res; } void init() { int num = 0; for (int i = 0; i < n; i++) { num = Scan(); vis[num]++; } } void solve() { int bo = 0; for (int i = 1; i <= 100; i++) { while (vis[i]) { if (bo++) printf(" "); printf("%d", i); vis[i]--; } } printf("\n"); } int main() { while (~scanf("%d", &n) && n) { init(); solve(); } return 0; }