UVA 11462 - Age Sort(计数排序+输入外挂)

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 (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                             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 
#include 

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


你可能感兴趣的:(算法设计-排序与检索)