P2524 Uim的情人节礼物·其之弐
题目描述
前传:详见洛谷P2525
Uim成功地按照顺序将礼物送到了N个妹子的手里并维持她们的和谐。
Uim现在想知道,他最终选择的顺序是所有给N个妹子送礼顺序中、字典序第几小的。
输入格式
第一行一个整数N,表示有N个数。
第二行一个整数X,表示给出的排列。
输出格式
一个整数,表示是第几小的字典序。
输入输出样例
输入 #1复制
3
231
输出 #1复制
4
说明/提示
1<=N<=9
输入的排列没有空格
初始思路:
展示逆序数规律
//12 0
//21 1
//123 0
//132 1
//213 1
//231 2
//312 2
//321 3
//1234 0
//1243 1
//1324 1
//1342 2
//1423 2
//1432 3
//2134 1
//2143 2
//2314 2
//2341 3
//2413 3
//2431 4
//12345 0
//12354 1
//12435 1
//12453 2
//12534 2
//12543 3
//13245 1
//13254 2
//13425 2
//13452 3
//13524 3
//13542 4
//14235 2
//14253
//14325
//14352
//14523
//14532
可见,0 1 1 2 2 3/1 2 2 3 3 4/ 2 3 3 4 4 5/……每六个一循环。嗯……,走偏了。
右边儿数字看不见哈
显然,数位越多的排列会涵盖数位更少的全排列,换句话说,数的排列位置等于每一个子数位(n-1,n-2,…, 1位数)全排列数量乘以(n, n-1, n-2, …,2子数位加一)数位上的数-1的和,最后记得加上它本身哦!
偶然发现,这居然就是题目想考的康托展开!!
康托展开
概念:
康托展开是一个全排列到一个自然数的双射,常用于构建哈希表时的空间压缩。 康托展开的实质是计算当前排列在所有由小到大全排列中的顺序,因此是可逆的。 --来源于度娘
双射大概就是给排列得位置,给位置得排列了。
康托展开的作用:
康托展开的作