先给出链接地址:Wikioi 1294
虽然题目很短,论难度也就是个深搜,算法方面我就不多说了,而且我知道c++有个函数叫next_permutation,谁用谁知道。
代码如下:
#include<stdio.h>
#include<algorithm>
using namespace std; int main()
{
int N;
scanf("%d",&N);
int* A = new int[N];
for(int i=;i<N;i++)
A[i] = i+;
do
{
for(int i=;i<N-;i++)
printf("%d ",A[i]);
printf("%d\n",A[N-]);
}while(next_permutation(A,A+N));
return ;
}
这里我想说的是用cout会超时,用printf就不会。我之前从来就没注意过他们之间的差别,并且以为cout这么方便,为啥还这么多人用printf,又或者以为别人用的c语言才用printf。现在发现完全不是这样的,是我图样图森破了。cin、cout和scanf、printf之间的区别百度、谷歌一搜一大把,我这只简略说一下我所知道的。
有人说不能一概而论就说cout比printf慢,还要看环境,但是反正我就没见过有比printf快的时候。有人说加上了sync_with_stdio(false);这一句后就不用跟stdio同步,效率能跟printf差不多了。有没有效果我不清楚,反正Wikioi只要你用cout,你加不加sync_with_stdio(false);都不能过,而且我看了一下两者的数据耗时几乎一样,也就是加了等于没加。如有不正确的地方欢迎指出或有不足之处请补充。
其实我觉得学到这些看似细微的技术反而比学到xxx算法更加兴奋与开心,因为我觉得xxx算法它就摆在那里,只要用途广泛,10个人有9个都能学会,可是偏偏就是cin、cout这些你天天面对的东西你反而容易自认为你能完全掌控了它们。