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;
}