5.2 模拟测试86

Posted jrf123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5.2 模拟测试86相关的知识,希望对你有一定的参考价值。

今天考试的时候没啥思路,就什么都不会,挣扎无果后只剩暴力了。

$T1$:人生

题意:$n$个点,部分点已确定黑白,规定只能走向不同颜色且比自己大的点(一个点也算一条路径)。求多少种连边方式能使得图中的路径条数为奇数。$n leq 2e5$

题解:设$end(x)$表示以$x$为结尾的合法方案数。$f[i][j][k][h]$表示前i个点,有j个白点满足$end$为奇数,有$k$个黑点满足$end$为奇数,前$i$个点形成的路径总数为奇/偶数,的方案数。$c(n,opt)$表示从$n$个点的集合中选出奇/偶数个点的方案数。

若当前点为白点,那么只有跟他相连的end为奇的黑点的奇偶性有关,其他i-k个点跟他当前点连不连边不影响,别忘了他自己单独一个点,然后就有四个转移:

$f[i+1][j][k][h]+=f[i][j][k][h]*c(k,1)*2^{i-k}$  //i+1为白点,奇数个end为奇的黑点连过来+自己,所以end(i+1)为偶,不影响h

$f[i+1][j+1][k][h^1]+=f[i][j][k][h]*c(k,0)*2^{i-k}$  //i+1为白点,偶数个end为奇的黑点连过来+自己,所以end(i+1)为奇,h改变

$f[i+1][j][k][h]+=f[i][j][k][h]*c(j,1)*2^{i-j}$  //i+1为黑点,奇数个end为奇的白点连过来+自己,所以end(i+1)为偶,不影响h

$f[i+1][j][k+1][h^1]+=f[i][j][k][h]*c(j,0)*2^{i-j}$  //i+1为黑点,偶数个end为奇的白点连过来+自己,所以end(i+1)为奇,h改变

发现$k>0$时,$c(k,0)*2^{i-k}=2^{i-1}$,$c(k,1)*2^{i-k}=2^{i-1}$;$k==0$时,$c(k,0)*2^{i-k}=2^{i}$,$c(k,1)*2^{i-k}=0$。所以方程可以简化成$f[i][0/1][0/1][h]$跟之前差不多,只不过只要记录是否存在$end$为奇的白/黑点就可以了。

 

$T2$:赢家

题意:$n$个点$m$条边,给边定向,使$1,2$能到达的点的交集不为空,求方案数。$n leq 15$

题解:大神说他讲过,一点印象都没有$kuku$。方案数=总方案数-不合法。设$1$出发能到达的点集为$S$,$2$出发能到达的点集为$T$,现在就是要求$S igcup T= O $。假设已有$f[s]$表示s点集内部的点都定向使得$1$能到达$s$中的任意点。$g[s]$类似。那么枚举$S,T$,($S,T$之间没边),只一个端点在选择集合中的边,一定是向里指,其他不在一个中的边随意。考虑$f[s]$怎么求。跟$ans$类似,用总方案-不合法。枚举一个$s$的真子集$t,s$里的边,只有一端在$s$里的,一定是指向$t$的,其他随意定向。预处理出一个点集中有多少条边$cnt[s]$数组即可。

 

$T3$:黑红兔

题意:长度为$n$的字符串,从左到右选出$k$个不交子段,使得每个串都是上一个串的严格子串。求最大的$k$

题解:首先,有最优的划分方案一定可以是$k,k-1,k-2...3,2,1$,所以$k$是$sqrt(n)$级别的。设$f[i]$表示最长的合法长度使得$[i,i+f[i]-1]$这个串出现在答案中。类似$sa$求$height$数组,左端点i向左移一位,$f$最多$+1$。然后判断当前这个$f[i]$合不合法,不合法就把左端点为$i+f[i]-1$的所有合法子串全扔进$map$,这样一定可以保证区间互不包含,而且合法子串的子串一定合法。然后$f[i]-1$,不断更新$f[i]$,取最大值就是答案了。判断合法:因为长度都是连续的,所以看去掉前面一个字符或后面的,是否能能在合法字符串中找到一样的 。一个优化,如果当前这个串已经在$map$里了,那么他的子串一定也在了,直接$break$即可。

 $ps.$我去学$T3$正解。

以上是关于5.2 模拟测试86的主要内容,如果未能解决你的问题,请参考以下文章

C++vector模拟实现

C++vector模拟实现

csp-s模拟测试86

Laravel 5.2:测试上传的文件是不是有效:非对象上的 isValid()

[CSP-S模拟测试]:Walker(数学)

Virtualbox安装安卓模拟器