题意:给若干个1~100的数字,要求排序后输出。
思路:读入文件约有25MB,因此无法使用快速排序,注意到数字范围特别小,可以使用基数排序。但是这不是重点,关键是优化输入输出,方法非常猥琐,对于这种大规模的输入输出,效果特别明显。。。
#include<cstdio> #include<cstring> #include<cctype> int sort[101],buf[10],n,t; inline int readint() { char c=getchar(); bool flag=1; while(!isdigit(c)) {if(c=='-') flag=0;c=getchar();} int x=0; while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); } if(!flag) x*=-1; return x; } inline void writeint(int i) { int p=0; if(i<0) {putchar('-');i*=-1;} if(!i) ++p; else while(i) { buf[p++]=i%10; i/=10; } for(int j=p-1;j>=0;--j) putchar('0'+buf[j]); } int main() { while(n=readint()) { memset(sort,0,sizeof(sort)); for(int i=0;i<n;++i) sort[readint()]++; bool flag=0; for(int i=1;i<=100;++i) for(int j=0;j<sort[i];++j) { if(flag) putchar(' '); writeint(i); flag=1; } putchar('\n'); } return 0; }