关于zk学长出的题的题解

现在可以公开了,毕竟已经打完了

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

下面是我的解释:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETkBBbGFzb19zaHVhbmc,size_14,color_FFFFFF,t_70,g_se,x_16

后面好像挂了,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。

思路:看图,我再来说说优化的地方

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQWxhc29fc2h1YW5n,size_15,color_FFFFFF,t_70,g_se,x_16

 对于大家来说,十进制转二进制不难吧,但是式子还可以化化简,最后可以的一个 2*2 的转移矩阵(时限为1s)最后会变成解特征方程,然后发现这一个等比数列,然后读入的时候 模 P-1 就好了

学长题解:如果你设的是 f_n : 1 和 n 相同,g_n ;1 和 n 完全不同 ,h_n ;1 和 n 有一个相同 ,就很好化简
当然不排除您数学能力强的打表可以找出规律!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值