「多校联考」第三周二场


这套题是真的很好,除了题目都有思路之外,还卡掉很多细节。
然而卡细节是考过的很多考试中从未考过的。
比如 T1T1T1 卡掉不开 long longlong\space longlong long 的巨佬们, T2T2T2 卡掉像我这样的蒟蒻连用 777memset 的人。
因为这套题没有评测系统,所以就不附代码了 因为我也不知道是不是对的,虽然本地用 lemon 测过,但是学生机都是老年机!
本文不久会附上测试所用的数据、 stdstdstd、题解和题目(pdfpdfpdf 版)

多年准备一场空 系列套题

T1 分数转换

Input file:frac.inInput\space file: frac.inInput le:frac.in
Output file:frac.outOutput\space file: frac.outOutput le:frac.out
Time limit:1.5secondsTime\space limit: 1.5 secondsTime limit:1.5seconds
Memory limit:512megabytesMemory\space limit: 512 megabytesMemory limit:512megabytes

题目

分数转换

考场思考(正解)

一道送分题…
至于怎么将无线小数转分数,可自行百度。 巨佬可自推,其实像我这样的蒟蒻都可以退出来
但是要注意,会爆 int ,然而又有巨佬要开 __int128 ,结果被编译器坑掉,悲惨 CECECE
其实开 long long 就可以了,何必要管那么多呢?
但是要注意,数据给出类似 0.33333[3]0.33333[3]0.33333[3] 的情况,这样的情况下,必须把输入处理为 0.[3]0.[3]0.[3]
当然,这可能是我自己码代码时不注意出现的 bugbugbug ,巨佬们能够完全避免就别管这句话吧…

多年准备一场空,不开 long longlong\space longlong long 见祖宗。


T2 Slow Path Finding Algorithm (SPFA)

SPFA
在这里插入图片描述

考场思路

这道题考场上看,感觉是比较简单的。
定义状态 dp[i][j]dp[i][j]dp[i][j] :走到 iii 点,字符 jjj 出现次数的最大值。
为了还原路径,再定义 pre[i][j]pre[i][j]pre[i][j]dp[i][j]dp[i][j]dp[i][j] 是从哪个点转移过来的。
然后根据这个状态,跑一边 spfaspfaspfa 即可。
但是因为是多组输入,所以注意数组的清空,然后我使用了 memset

正解

思路都对,但是 memset 有点问题。
然后我被卡掉了…
下次我用 for() 来清,再也不装 XXX 了…

多年准备一场空,乱用 memmemmem 见祖宗。


T3 切面包

在这里插入图片描述

考场思路

这道题因为在考试的时候调 T2T2T2 过久,所以题都没看。

正解

20pts 思路
这个思路并不是测试点 111 的分,而是测试点 222 的分。
为什么?仔细一想,499122176998224352=12\frac{499122176}{998224352}=\frac{1}{2}998224352499122176=21,并且没有事件一,那么这个数据点就很简单了。
想必具体思路不必过多赘述了吧 😃。
40pts 思路
测试点 222 过了之后,再暴力搜出所有的情况,时间复杂度 O(n+m⋅2n)O(n+m\cdot 2^n)O(n+m2n)
这样就可以拿 40pts40pts40pts 的高分了,在对于这道题不够擅长的情况下, 200pts+40pts=240pts200pts +40pts=240pts200pts+40pts=240pts 已经是这一套题的最高分了。


100pts 思路

本思路来源于 High School Affiliated to Southwest University 学校的 jiangly 巨佬

下见题解图片,黄色标记处为题解错误,标记处应为 +2∑i=1n−2pipi+12+2\sum_{i=1}^{n-2}p_i{p_{i+1}}^2+2i=1n2pipi+12少了一个系数 222
在这里插入图片描述
现在我来加以解释 巨佬可直接忽略
首先,我们引入一个变量 xix_ixi
xi=1x_i=1xi=1 时,表示这段面包的 iii 位破掉。
xi=0x_i=0xi=0 时,表示这段面包的 iii 位是完好的。
那么,当我们用 xix_ixi 来表示这段面包的 破损///完好 情况时,得到的是一个 010101 串。
那么,在什么时候,我们所拥有的面包段数会增加呢?
为了方便考虑,我们只关注两段面包的情况,先假设前面的面包完好,对于一些有问题的情况,我们在之后进行排除即可。


情况一:两个连续的面包完好的情况
情况一
即当 000000 出现的时候,这时面包段数不会增加。


情况二:两个连续的面包破损的情况
情况二
即当 111111 出现的时候,这时面包段数不会增加。


情况三:两段面包前好后破的情况
情况三
即当 010101 出现的时候,这时面包段数不会增加。


情况四:两段面包前破后好的情况
情况四
即当 101010 出现的时候,这时面包段数会增加


通过对上面情况的分析,当前面的面包完好的情况下,只有当 101010 情况出现时,面包段数会增加。
用数学语言表述就是x=1+∑i=1n−1(xi+xi+1−xixi+1)x=1+\sum_{i=1}^{n-1}(x_i+x_{i+1}-x_ix_{i+1})x=1+i=1n1(xi+xi+1xixi+1)仔细体会这个公式,其中,前面 +1+1+1 是特殊处理最前面 x0=1x_0=1x0=1 的情况,其他的细节不多说,你会发现我们前面的定义:

xi=1x_i=1xi=1 时,表示这段面包的 iii 位破掉。
xi=0x_i=0xi=0 时,表示这段面包的 iii 位是完好的。

这个定义是多么的方便。
我们再换个分析方式,假设每个断掉的面包都可以分出左右两段,如图:
情况
这个时候,每个断掉的面包都可以分出两段,那么就有x=1+∑i=2n−1xix=1+\sum_{i=2}^{n-1}x_ix=1+i=2n1xi但是,问题呼之而出,当两段连续的面包一起破损的时候,是不会产生新的面包,要减去这样的情况。
那么最后的公式就是x=1+∑i=2n−1xi−∑i=1n−1xixx+1x=1+\sum_{i=2}^{n-1}x_i-\sum_{i=1}^{n-1}x_ix_{x+1}x=1+i=2n1xii=1n1xixx+1但是,这道题要求的是 x2x^2x2 ,那么怎么做呢?
还能怎么做?暴力展开 x2x^2x2 啊…
前面已经得到:
x2=(1+∑i=2n−1xi−∑i=1n−1xixx+1)2x^2=(1+\sum_{i=2}^{n-1}x_i-\sum_{i=1}^{n-1}x_ix_{x+1})^2x2=(1+i=2n1xii=1n1xixx+1)2将这个括号打开:
x2=1+∑2≤i<n∑2≤j<nxixj+∑1≤i<n∑1≤j<nxixi+1xjxj+1+2∑2≤i<nxi−2∑1≤i<nxixi+1−2∑2≤i<n∑1≤j<nxixjxj+1x^2=1+\sum_{2\le i<n}\sum_{2\le j<n}x_ix_j+\sum_{1\le i<n}\sum_{1\le j<n}x_ix_{i+1}x_jx_{j+1}+2\sum_{2\le i<n}x_i-2\sum_{1\le i<n}x_ix_{i+1}-2\sum_{2\le i<n}\sum_{1\le j<n}x_ix_jx_{j+1}x2=1+2i<n2j<nxixj+1i<n1j<nxixi+1xjxj+1+22i<nxi21i<nxixi+122i<n1j<nxixjxj+1但是,我们最后要求的其实是期望,所以要将所有的 xix_ixi 换成概率 pip_ipi
这里有点太复杂了,我们用概率运算一项一项地展开这六项。


第一项
1=11=11=1这个应该没有问题…我们已经解决 16\frac{1}{6}61 了,加油 😃。


第二项
∑2≤i<n∑2≤j<nxixj=(∑2≤i<npi)2−∑2≤i<npi2+∑2≤i<npi\sum_{2\le i<n}\sum_{2\le j<n}x_ix_j=(\sum_{2\le i<n}p_i)^2-\sum_{2\le i<n}{p_i}^2+\sum_{2\le i<n}p_i2i<n2j<nxixj=(2i<npi)22i<npi2+2i<npi具体做一下解释,情况 AAABBB (A≠B)(A\neq B)(A=B) 一起发生的概率为
P(AB)=P(A)×P(B)P(AB)=P(A)\times P(B)P(AB)=P(A)×P(B)但是,当情况 AAABBB (A=B)(A=B)(A=B)一起发生的概率为P(AA)=P(A)P(AA)=P(A)P(AA)=P(A)这是特殊情况,所以我们先要减去 A=BA=BA=B 这样的特殊情况的错误计算方式,再加上它们的正确计算方式。


第三项
∑1≤i<n∑1≤j<nxixi+1xjxj+1\sum_{1\le i<n}\sum_{1\le j<n}x_ix_{i+1}x_jx_{j+1}1i<n1j<nxixi+1xjxj+1这种情况有点复杂,我们分开讨论。

-当 i=ji=ji=j(∑i=1n−1pipi+1)2−∑i=1n−1pi2pi+12+∑i=1n−1pipi+1(\sum_{i=1}^{n-1}p_ip_{i+1})^2-\sum_{i=1}^{n-1}{p_i}^2{p_{i+1}}^2+\sum_{i=1}^{n-1}p_ip_{i+1}(i=1n1pipi+1)2i=1n1pi2pi+12+i=1n1pipi+1

  • i=j−1i=j-1i=j1∑1≤i≤n−2pipi+1pi+2−∑i=1n−2pipi+12pi+2\sum_{1\le i\le n-2}p_ip_{i+1}p_{i+2}-\sum_{i=1}^{n-2}p_i{p_{i+1}}^2p_{i+2}1in2pipi+1pi+2i=1n2pipi+12pi+2
  • i=j+1i=j+1i=j+1∑1≤i≤n−2pipi+1pi+2−∑i=1n−2pipi+12pi+2\sum_{1\le i\le n-2}p_ip_{i+1}p_{i+2}-\sum_{i=1}^{n-2}p_i{p_{i+1}}^2p_{i+2}1in2pipi+1pi+2i=1n2pipi+12pi+2其实是和第二个情况是一样的。

所以,第三项总共就是(∑i=1n−1pipi+1)2−∑i=1n−1pi2pi+12+∑i=1n−1pipi+1+2∑1≤i≤n−2pipi+1pi+2−2∑i=1n−2pipi+12pi+2(\sum_{i=1}^{n-1}p_ip_{i+1})^2-\sum_{i=1}^{n-1}{p_i}^2{p_{i+1}}^2+\sum_{i=1}^{n-1}p_ip_{i+1}+2\sum_{1\le i\le n-2}p_ip_{i+1}p_{i+2}-2\sum_{i=1}^{n-2}p_i{p_{i+1}}^2p_{i+2}(i=1n1pipi+1)2i=1n1pi2pi+12+i=1n1pipi+1+21in2pipi+1pi+22i=1n2pipi+12pi+2我们终于完成 12\frac{1}{2}21 了,然而我的脑细胞也被杀掉 12\frac{1}{2}21 了 😃。


第四项
可以直接建立等式2∑2≤i<nxi=2∑2≤i<npi2\sum_{2\le i<n}x_i=2\sum_{2\le i<n}p_i22i<nxi=22i<npi


第五项
也可以直接建立等式−2∑i=1n−1xixi+1=−2∑i=1n−1pipi+1-2\sum_{i=1}^{n-1}x_ix_{i+1}=-2\sum_{i=1}^{n-1}p_ip_{i+1}2i=1n1xixi+1=2i=1n1pipi+1


第六项
我们先将 - 抛弃,等会在括号之前加上即可。
先进行直接转换:2(∑i=2n−1pi)(∑i=1n−1pipi+1)2(\sum_{i=2}^{n-1}p_i)(\sum_{i=1}^{n-1}p_ip_{i+1})2(i=2n1pi)(i=1n1pipi+1)

  • i=ji=ji=j 时,需要−2∑i=2n−1pi2pi+1+2∑i=2n−1pipi+1-2\sum_{i=2}^{n-1}{p_i}^2p_{i+1}+2\sum_{i=2}^{n-1}p_ip_{i+1}2i=2n1pi2pi+1+2i=2n1pipi+1
  • i=j+1i=j+1i=j+1 时,需要−2∑i=1n−2pipi+12+2∑i=1n−2pipi+1-2\sum_{i=1}^{n-2}p_i{p_{i+1}}^2+2\sum_{i=1}^{n-2}p_ip_{i+1}2i=1n2pipi+12+2i=1n2pipi+1

然后,我们将他们加起来,就是第六项了:
2(∑i=2n−1pi)(∑i=1n−1pipi+1)−2∑i=2n−1pi2pi+1+2∑i=2n−1pipi+1−2∑i=1n−2pipi+12+2∑i=1n−2pipi+12(\sum_{i=2}^{n-1}p_i)(\sum_{i=1}^{n-1}p_ip_{i+1})-2\sum_{i=2}^{n-1}{p_i}^2p_{i+1}+2\sum_{i=2}^{n-1}p_ip_{i+1}-2\sum_{i=1}^{n-2}p_i{p_{i+1}}^2+2\sum_{i=1}^{n-2}p_ip_{i+1}2(i=2n1pi)(i=1n1pipi+1)2i=2n1pi2pi+1+2i=2n1pipi+12i=1n2pipi+12+2i=1n2pipi+1
不要忘记了前面我们省掉的 -


最后,将所有的化简结果 其实并没有化简,只有结果 加起来,就是我们的 x2x^2x2 的了。
x2=1+(∑2≤i<npi)2+3∑i=2n−1pi−5∑i=1n−1pipi+1+2p1p2+2pn−1pn−∑i=2n−1pi2+(∑i=1n−1pipi+1)2x^2=1+(\sum_{2\le i<n}p_i)^2+3\sum_{i=2}^{n-1}p_i-5\sum_{i=1}^{n-1}p_ip_{i+1}+2p_1p_2+2p_{n-1}p_n-\sum_{i=2}^{n-1}{p_i}^2+(\sum_{i=1}^{n-1}p_ip_{i+1})^2x2=1+(2i<npi)2+3i=2n1pi5i=1n1pipi+1+2p1p2+2pn1pni=2n1pi2+(i=1n1pipi+1)2
−∑i=1n−1pi2pi+12+2∑i=1n−2pipi+1pi+2−2∑i=1n−2pipi+12pi+2−2(∑i=2n−1pi)(∑i=1n−1pipi+1)+2∑i=2n−1pi2pi+1+2∑i=1n−2pipi+12-\sum_{i=1}^{n-1}{p_i}^2{p_{i+1}}^2+2\sum_{i=1}^{n-2}p_ip_{i+1}p_{i+2}-2\sum_{i=1}^{n-2}p_i{p_{i+1}}^2p_{i+2}-2(\sum_{i=2}^{n-1}p_i)(\sum_{i=1}^{n-1}p_ip_{i+1})+2\sum_{i=2}^{n-1}{p_i}^2p_{i+1}+2\sum_{i=1}^{n-2}p_i{p_{i+1}}^2i=1n1pi2pi+12+2i=1n2pipi+1pi+22i=1n2pipi+12pi+22(i=2n1pi)(i=1n1pipi+1)+2i=2n1pi2pi+1+2i=1n2pipi+12
公式终于推完了,可能有点乱,把一些项数进行了合并
然后,我们怎么做呢?
我的方法时使用八颗线段树分别维护 pi、pi2、pipi+1、pi2pi+1、pipi+12、pi2pi+12、pipi+1pi+2、pipi+12pi+2p_i、{p_i}^2、p_ip_{i+1}、{p_i}^2p_{i+1}、p_i{p_{i+1}}^2、{p_i}^2{p_{i+1}}^2、p_ip_{i+1}p_{i+2}、p_i{p_{i+1}}^2p_{i+2}pipi2pipi+1pi2pi+1pipi+12pi2pi+12pipi+1pi+2pipi+12pi+2 即可。

多年准备一场空,不学数学见祖宗


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值