UVa 11462 Age Sort

解题报告:给若干个居民的年龄排序,年龄的范围在1到100之间,输入的总人数在0到200W。这题要注意的输入的文件约有25MB,而内存限制为2MB,所以如果人数是像200W这样多的话,甚至都不能把它们都读入内存,所以就不能用快速排序等各种排序,只能通过标记来进行排序,这题很明显的一个特征就是要排序的数字都不大,只有1到100,要排序的数字的个数大于要排序的数字的范围,所以我们可以定义一个数组age[105],然后将他各个都初始化为0,若输入了一个数,则将以这个数为下标的上标相应的加1,表示年龄是这个数字的人有多少个。最后只要从1到100将这些数字根据它们的个数输出来就可以了.

 1 #include<cstdio>
 2 #include<cstring>
 3 int n,age[101];
 4 int main() {
 5     while(scanf("%d",&n)&&n) {
 6         int a;
 7         memset(age,0,sizeof(age));
 8         for(int i=0;i<n;++i) {
 9             scanf("%d",&a);
10             age[a]++;
11         }
12         bool flag = 1;
13         for(int i=1;i<=100;++i)
14         for(int j=0;j<age[i];++j) {
15             if(!flag) printf(" ");
16             flag=0;
17             printf("%d",i);
18         }
19         
20         printf("\n");
21     }
22     return 0;
23 }
View Code

 

posted @ 2013-06-26 20:45  xiaxiaosheng  阅读(253)  评论(0编辑  收藏  举报