现在可以公开了,毕竟已经打完了
T1
题目描述
定义随机打乱 :若数列长度为 n ,则随机打乱后,其有 \dfrac 1{n!} 的概率变成它的任意一种排列。
于是有一种基于无穷的 “ 猴子排序 ” 算法 : 把给定的数列随机打乱 ,若数列完成排序则结束 ,否则重新打乱 ,直到完成排序为止 。算法期望复杂度为 O(N!) 级别。
你,聪明的,发现这个算法有失智慧 。于是发明了一种新的算法,称作 “ 猿排序 ”:
对于一个数列,每步操作中,你只会取出一些位置 ,将这些位置随机打乱后放回原处 。每一步相互独立,即你可以随时根据数列当前状况决定这次要打乱的位置 。
现在给你一个长度为 n 的数列 a , 保证对于 \forall i\ne j∀i=j , a_i\ne a_jai=aj 。求出在采用 最优策略 的情况下,将其排成 升序 的期望步数。答案对 998244353 取模。
输入格式
第一行一个整数 T , 表示数据组数。
对于每组数据:第一行一个整数 n,表示数列长度。第二行 n 个数表示数列 a 。
输出格式
输出 T行,表示在采用最优策略的情况下,将数列 a 排成升序 的期望步数。
输入输出样例
输入 #1复制
2 2 100 10 3 3 1 2
输出 #1复制
2 3
说明/提示
样例解释
第一组数据 ,每次打乱的位置集合都是 \{1,2\},直到数列变成 10,100 为止 。设期望步数为x ,则有x=1+\dfrac1 2\times
上方程含义为:进行 1 步打乱,有 \dfrac1 的概率数列不变,有 \dfrac1 的概率数列变成 10,100 即成功排序。
解得 x=2, 故期望步数为 2 。
第二组数据:一种最优策略为:不断全部打乱直到至少有一个归位,保留归位的这个,变成 n=2 的问题 。可以求得期望步数为 3 。
数据范围
对于\%100的数据,T\leq10 , n\leq10^6 , a_i\leq10^9。
思路:感觉最优策略下各环是独立的,然后就dp(i)表示一个长度为i的环的期望步数
(学长帮忙证过,感觉挺对的)
因为目的是让环减少嘛,最后全部是一元环就排好了,你两个环相交的话,环甚至可能增多,每个环分开做算出期望步数是 O(n) 的,远优于 n!
学长给的题解是考虑 2 1 4 3,把排列拆成若干个环,会发现两个环间不会一起换,这样搞仅仅不行,还有期望呢!
设 f_n 是换完一个n元环的期望步数,设 g_n 是换完一个长度为 n 的排列的期望步数,包含了取到每一种排列的概率,然后转移f_n
下面是我的解释:
后面好像挂了,O(n^2)应该还是对的
T2
题目描述
你有一含个 n 个豌豆的豌豆项链,编号 1 ~ n 。 每一颗豌豆都是独特的。即,为了加以区分,你可以认为 1 号豌豆和 n 号豌豆间有一个绳结。
孟德尔曾言,豌豆有两种性状:黄绿与圆皱。从而每颗豌豆都有四种可能的性状搭配:黄圆、黄皱,绿圆、绿皱。
如果一个豌豆项链上任意两个相邻的豌豆都有至少一种性状相同(如,都是绿色、都是圆粒等),这个豌豆项链就是好看的。
关于相邻,众所周知,在一个项链中,1 号与 2 号相邻,2 号与 3 号相邻 …… n 号与 1 号相邻。
你打算告诉小二,所有含 n 颗豌豆的豌豆项链,有多少是好看的。答案对 10^9+7 取模。
两个项链不同,当且仅当对应编号的豌豆性状搭配不同。
为防止过量的输出,只要输出所有 T 组数据答案的异或和(不一定小于 10^9+7! )。
输入格式
第一行一个正整数 T ,表示数据组数。
接下来 T 行,每行一个正整数 n ,表示豌豆个数。
本题输入量较大,请采用合适的输入方法。
输出格式
输出 1行,表示所有 T 组数据对应的( n 个豌豆的好看项链总数 \bmod 10^9+7 )的异或和。
输入输出样例
输入 #1复制
3 1 2 3
输出 #1复制
20
输入 #2复制
3 1145 1419 19810
输出 #2复制
742309777
说明/提示
样例解释:
样例一: 答案分别为 4, 12, 28 ,异或和为 20。
-
2 颗豌豆的 12 种的解释:
2 颗豌豆完全一样,有 4 种,
2颗豌豆不完全一样,有8 种。
数据范围:
-
对于前 \%10的数据,n\leq10 ,
-
对于前 \%40 的数据,n\leq10^6 ,
-
对于前 \%70 的数据,n\leq10^{18} ,
-
对于 \%100的数据,n\leq10^{100} , T\leq10^5。
思路:看图,我再来说说优化的地方
对于大家来说,十进制转二进制不难吧,但是式子还可以化化简,最后可以的一个 2*2 的转移矩阵(时限为1s)最后会变成解特征方程,然后发现这一个等比数列,然后读入的时候 模 P-1 就好了
学长题解:如果你设的是 f_n : 1 和 n 相同,g_n ;1 和 n 完全不同 ,h_n ;1 和 n 有一个相同 ,就很好化简
当然不排除您数学能力强的打表可以找出规律!