由于上一场 G 题没做出来。。打算重新复习一下各种排列相关的知识。。。
Table of Contents
- Combinatorial Problems and Exercises, 2nd Edition, László Lovász, #3 Permutations
- The Art of Computer Programming, Vol. 3 Sorting and Searching, 2nd Edition, Donald E. Knuth, 5.1. Combinatorial Properties of Permutations
第一部分
错位排列()
自反排列
- https://mathworld.wolfram.com/PermutationInvolution.html
- https://en.wikipedia.org/wiki/Involution_(mathematics)
交错排列
类 Catalan 递推公式
类 Pascal 递推公式
生成函数
第二部分
循环分解
不动点
逆序对
#include <lastweapon/io>
#include <lastweapon/number>
using namespace lastweapon;
const int N = int(1e3) + 9;
int a[N], mx[N], mn[N], cc[N];
int n;
VI circle() {
bool static used[N]; RST(used);
VI z;
REP(i, n) if (!used[i]) {
int x = i; used[x] = true; int c = 1;
while (!used[a[x]-1]) {
x = a[x]-1;
used[x] = true;
++c;
}
z.PB(c);
}
return z;
}
bool used[N];
void dfs(int k = 0) {
if (k == n) {
//REP(i, n) cout << a[i] << " "; cout << endl;
VI r = circle();
++mx[*max_element(ALL(r))];
++mn[*min_element(ALL(r))];
++cc[SZ(r)];
} else {
REP_1(i, n) if (!used[i]) {
used[a[k] = i] = true;
dfs(k+1);
used[i] = false;
}
}
}
int main(){
#ifndef ONLINE_JUDGE
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
#endif
//scanf("%d%d",&n,&MOD);
REP_1(i, 10) {
//RD(n);
RST(used); RST(mn); RST(mx); RST(cc);
n = i; dfs();
//REP_1(i, n) cout << mx[i] <<" "; cout << endl;
//REP_1(i, n) cout << mn[i] <<" "; cout << endl;
REP_1(i, n) cout << cc[i] <<" "; cout << endl;
}
}




Alca
Amber
Belleve Invis
Chensiting123
Edward_mj
Fotile96
Hlworld
Kuangbin
Liyaos
Lwins
LYPenny
Mato 完整版
Mikeni2006
Mzry
Nagatsuki
Neko13
Oneplus
Rukata
Seter
Sevenkplus
Sevenzero
Shirleycrow
Vfleaking
wangzhpp
Watashi
WJMZBMR
Wywcgs
XadillaX
Yangzhe
三途川玉子
About.me
Vijos
