洛谷传送门:Permutation Chain - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
难度:普及-
知识点:思维题
思路:
要输出最长的序列,且"固定性"严格递减
那就要让他递减速度最慢,每次-1
如果交换两个a[i]=i的数,固定性-2,所以只能交换一个a[i]=i的数
因此可以想到,从左到右两两依次交换的方法进行交换
AC代码:
和众多题解不同,本蒟蒻写了一个空间复杂度O(1)的代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int q,n; scanf("%d", &q);
while(q--){
scanf("%d", &n); printf("%d\n", n);
for(int i = 1; i<=n; i++){
printf("%d ", i);
}
printf("\n");
for(int i = 2; i<=n; i++){
int j;
for(j = 2; j<=i; j++){
printf("%d ", j);
}
printf("1 ");
for(j; j<=n; j++) printf("%d ", j);
printf("\n");
}
}
return 0;
}
/*
知识点: 思维题
思路:
要输出最长的序列,且"固定性"严格递减
那就要让他递减速度最慢,每次-1
如果交换两个a[i]=i的数,固定性-2,所以只能交换一个a[i]=i的数
因此可以想到,从左到右两两依次交换的方法进行交换
心路历程:
读题读了10分钟...醉了
12
21
123
213
231
1234
2134
2314
2341
共耗时:30min
*/