做了那么多题,只遇到过2个专门卡空间的题目,一个是某次比赛的,题目是啥都忘掉了,还有一个就是这个水题了。但这题主要值得学习的地方在于输入输出的优化,真的没想到自己写的输入输出能快那么多。250ms与80ms的区别。不过大白书上说的也对,在确信I/O时间成为整个程序性能瓶颈之前,不要盲目优化。至今还没遇到卡手写输入输出的题目= =。
isdigit函数在头文件cctype里。
输入输出函数写成inline。
代码
#include<bits/stdc++.h>
using namespace std;
int n;
int cnt[110];
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 x)
{
int p=0;
if(x==0) buf[p++]=0;
else
{
while(x)
{
buf[p++]=x%10;
x/=10;
}
for(int i=p-1;i>=0;i--) putchar('0'+buf[i]);
}
}
int main()
{
while(scanf("%d",&n)==1&&n)
{
memset(cnt,0,sizeof(cnt));
int t;
for(int i=1;i<=n;i++)
cnt[readint()]++;
t=0;
for(int i=1;i<=100;i++)
{
while(cnt[i])
{
if(t) printf(" ");
t=1;
writeint(i);
cnt[i]--;
}
}
puts("");
}
return 0;
}