UVA - 11462 - Age Sort (高效算法!!)

11462 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 ?le. 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

5

3 4 2 1 5

5

2 3 2 3 1

0

Sample Output

1 2 3 4 5

1 2 2 3 3

思路:计数排序

AC代码1(519ms):

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
	int x, n, c[101];
	while(scanf("%d", &n) == 1 && n)
	{
		memset(c, 0, sizeof(c));
		for(int i=0; i<n; i++)
		{
			scanf("%d", &x);
			c[x]++;
		}
		int flag = 1;
		for(int i=1; i<=100; i++)
			for(int j=0; j<c[i]; j++)
			{
				if(!flag) printf(" ");
				flag = 0;
				printf("%d", i);
			}
		printf("\n");
	}
	return 0;
}

AC代码2(172ms):

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cctype>      //为了使用isdigit宏
using namespace std;

inline int readint()
{
	char c = getchar();
	while(!isdigit(c)) c = getchar();

	int x = 0;
	while(isdigit(c))
	{
		x = x * 10 + c - '0';
		c = getchar();
	}
	return x;
}

int buf[10];		//声明成全局变量可以减小开销
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()
{
	int n, x, c[101];
	while(n = readint())
	{
		memset(c, 0, sizeof(c));
		for(int i = 0; i < n; i++) c[readint()]++;
		int flag = 1;
		for(int i = 1; i <= 100; i++)
			for(int j=0; j < c[i]; j++)
			{
				if(!flag) putchar(' ');
				flag = 0;
				writeint(i);
			}
		putchar('\n');
	}
	return 0;
}
时间: 2024-10-13 03:15:12

UVA - 11462 - Age Sort (高效算法!!)的相关文章

[2016-03-19][UVA][11462][Age Sort]

时间:2016-03-19 20:22:57 星期六 题目编号:[2016-03-19][UVA][11462][Age Sort] 题目大意:给定n个数字,输出排序后的数据, 分析:n<=2*1E6,多组数据,所以不能直接读取然后排序,这里的数据内容范围是1~100,则可以通过计数的方式来统计,或者自己编写读取和输出的函数来优化 方法2 #include <cstdio> #include <cstring> using namespace std; typedef lon

UVA之11462 - 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.

11462 - Age Sort

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2457 题目大意: 给出数组年龄数据,每组有n(0<n<=2000000)个数据,要求按从小到大的顺序进行排列,需要注意的是输入的数据有可能比较多,所以需要使用更快的IO 案例: Sample Input 5 3 4 2 1 5 5 2 3 2 3 1 0 Sample

ACM比赛(11462 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

11462 Age Sort(计数排序)

内存不够用,用计数排序可以解决问题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<map> #include<set> #include<vector> #include<list> #include<

COGS 1406. 邻居年龄排序[Age Sort,UVa 11462]

★   输入文件:AgeSort.in   输出文件:AgeSort.out   简单对比时间限制:1 s   内存限制:2 MB [题目描述] Mr.Zero(CH)喜闻乐见地得到了一台内存大大增强的 OI型 Apple Ⅱ,可以运行C,C++,和Pascal!为了炫耀这台高端的计算机,Mr.Zero决心将邻居们的年龄(0≤Age[i]≤120)统计后进行统计.但是,古董终究是古董,Mr.Zero拥有最多n个邻居(n≤2,400,000)但是计算机所能运行程序时的内存限制竟然达到了2MB.请你

高效算法设计举例

摘自算法<竞赛入门经典训练指南> 例题 年龄排序(Age Sort,UVa 11462) 给定若干居民的年龄(都是1~100之间的整数),把它们按照从小到大的顺序输出. [输入] 输入包含多组测试用例.每组数据的第一行为整数n(0<n<=2 000 000),即居民总数:下一行包含n个不小于1.不大于100的整数,即各居民的年龄.输入结束标志为n=0. 输入文件约有25mb,而内存限制只有2mb. [输出] 对于每组数据,按照从小到大的顺序输出各居民的年龄,相邻年龄用单个空格隔开.

总结: Sort 排序算法

排序总结 面试经验 硅谷某前沿小Startup面试时,问到的一个题目就是写一个快速排序算法.进而面试官问到了各种算法的算法复杂度,进而又问了Merge Sort 与 QuickSort 的优劣. 对排序算法的全面理解,体现了计算机学生的功底. 现在来讲Merge Sort 与Quick Sort 是最流行的算法,以下我们来一步一步地分析: SORT分类 在计算机科学所使用的排序算法通常被分類為: 計算的時間複雜度(最差.平均.和最好表現),依據串列(list)的大小(n).一般而言,好的表現是O

UVA 1016 - Silly Sort(置换分解+贪心)

UVA 1016 - Silly Sort 题目链接 题意:给定一个序列,数字都不同,每次可以交换两个数字,交换的代价为两数之和,要求出把这个序列变成递增最小代价 思路:利用置换的分解原理,可以把序列的每条循环单独考虑,对于每条循环而言,不断交换肯定每个数字至少会换到一次,再利用贪心的思想,如果每次拿循环中的最小值去置换,那么就是这个最小值会用长度-1次,而剩下的数字各一次,注意这里还有一种可能优的方法,就是先把整个序列中的最小值换到该循环中,等置换完再换出去,两种都考虑进来即可 代码: #in