1.题目描述:点击打开链接
2.解题思路:本题是一道简单的排序题,相信很多人都会做。但是本题值得学习的地方并不在于排序的方法,而是在于如何尽可能的优化I/O时间。下面展示两种不同的输入输出方法的时间差异。
(方法一:利用scanf/printf输入输出)
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cctype>
#include<functional>
using namespace std;
#define me(s) memset(s,0,sizeof(s))
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair <int, int> P;
const int N=200+10;
int a[N];
int main()
{
int n;
while(~scanf("%d",&n)&&n)
{
memset(a,0,sizeof(a));
int x;
for(int i=0;i<n;i++)
{
scanf("%d",&x);
a[x]++;
}
int first=1;
for(int i=1;i<=100;i++)
for(int j=0;j<a[i];j++)
{
if(!first)printf(" ");
printf("%d",i);
first=0;
}
puts("");
}
}
运行后,结果如下:
(方法二:编写专门的输入输出函数,逐字符的输入,输出)
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<iostream>
#include<algorithm>
#include<cassert>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cctype>
#include<functional>
using namespace std;
#define me(s) memset(s,0,sizeof(s))
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair <int, int> P;
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)p++;
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 first=1;
for(int i=1;i<=100;i++)
for(int j=0;j<c[i];j++)
{
if(!first)printf(" ");
first=0;
writeint(i);
}
puts("");
}
}
运行后,结果如下:
的确和《训练指南》上说的一样,时间上优化了约2/3,可见优化效果还是很高的。顺便翻看了一下所有提交记录,能够小于100ms的几乎没有。虽然这是一个非常小的细节问题,但有备无患。