【题解】
思路:因为询问只有1e4的大小,可以知道最多只与后8位有关,那么大于8的显然最小的排列为n,1,2,3,....所以我们可以跑出后8位的排列,结构体排序输出即可。
【代码】
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=5e5+10;
struct p{
int a[25];
int len;
}f[maxn];
bool cmp(p x,p y)
{
for(int i=1;i<x.len;i++)
if(x.a[i]-x.a[i-1]!=y.a[i]-y.a[i-1])
return x.a[i]-x.a[i-1]<y.a[i]-y.a[i-1];
}
int b[15];
int main()
{
int T; scanf("%d",&T);
while(T--){
int n,k; scanf("%d%d",&n,&k);
int d,pos=0;
if(n<9){
for(int i=0;i<n;i++) b[i]=i+1;
do{
pos++;
for(int i=0;i<n;i++)
f[pos].a[i]=b[i];
}while(next_permutation(b,b+n));
}
else{
for(int i=0,j=8;i<8;i++,j--) b[i]=n-j;
do{
pos++;
f[pos].a[0]=n;
for(int i=1;i