POJ 1833 排列 c++版

题目链接:http://poj.org/problem?id=1833

下午研究了下1833,一个全排列问题,其中分析排列顺序并不容易,但是我们要感谢那些编写库函数的朋友,被我发现个全排列的函数next_permutation有的解释是这样的:

这是一个求一个排序的下一个排列的函数。如果要走遍所有的排列,你必须先排序。这是这两个函数使用需要注意的地方。
而其prev_permutation与之相反,是求一个排列的前一个排序。

这个题我原本的代码在vs10下运行正常,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int f[1028];
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>f[i];
while(k--)
next_permutation(f,f+n);
cout<<f[0];
for(int i=1;i<n;i++)
cout<<" "<<f[i];
cout<<endl;
}
return0;
}


修改代码恢复老式输入输出结构代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*Problem: 1833		User: awq123
**Memory: 176K Time: 500MS
**Language: C++ Result: Accepted
*/
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int f[1028];
int t;
scanf("%d", &t;);
while(t--)
{
int n,k;
scanf("%d%d", &n;, &k;);
for(int i=0;i<n;i++)
scanf("%d", &f;[i]);
while(k--)
next_permutation(f,f+n);
printf("%d", f[0]);
for(int i=1;i<n;i++)
printf(" %d", f[i]);
printf("n");
}
return 0;
}