您的位置:首页 > 其它

UVa 11462 Age Sort (计数排序&快速输入输出)

2013-09-04 18:17 274 查看


11462 - Age Sort

Time limit: 5.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=460&page=show_problem&problem=2457

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.

注意注意:内存限制自由2M,所以sort不可用,但数字的范围在1~100间,所以用计数排序

复杂度:O(n)

完整代码:

/*0.158s*/

#include<cstdio>
#include<cstring>
#include<cctype>

int buf[10]; // 声明成全局变量可以减小开销

inline int readint()
{
	char c = getchar();
	while (!isdigit(c))
		c = getchar();
	int x = 0;
	while (isdigit(c))
	{
		x = x * 10 + (c & 15); // 数字处理优化,少了4ms
		c = getchar();
	}
	return x;
}

inline void writeint(int i)
{
	int p = 0;
	if (i == 0)
		p++; // 特殊情况:i等于0的时候需要输出0,而不是什么也不输出
	else
		while (i)
		{
			buf[p++] = i % 10;
			i /= 10;
		}
	for (int j = p - 1; j >= 0; j--)
		putchar('0' + buf[j]); // 逆序输出
}

int main(void)
{
	int n, x, c[101];
	while (n = readint())
	{
		memset(c, 0, sizeof(c));
		for (int i = 0; i < n; i++)
			c[readint()]++;
		int first = 1;
		for (int i = 1; i <= 100; i++)
			for (int j = 0; j < c[i]; j++)
			{
				if (!first)
					putchar(' ');
				first = 0;
				writeint(i);
			}
		putchar('\n');
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: