「多校联考」第三周二场


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

多年准备一场空 系列套题

T1 分数转换

I n p u t   fi l e : f r a c . i n Input\space file: frac.in Input le:frac.in
O u t p u t   fi l e : f r a c . o u t Output\space file: frac.out Output le:frac.out
T i m e   l i m i t : 1.5 s e c o n d s Time\space limit: 1.5 seconds Time limit:1.5seconds
M e m o r y   l i m i t : 512 m e g a b y t e s Memory\space limit: 512 megabytes Memory limit:512megabytes

题目

分数转换

考场思考(正解)

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

多年准备一场空,不开 l o n g   l o n g long\space long long long 见祖宗。


T2 Slow Path Finding Algorithm (SPFA)

SPFA
在这里插入图片描述

考场思路

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

正解

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

多年准备一场空,乱用 m e m mem mem 见祖宗。


T3 切面包

在这里插入图片描述

考场思路

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

正解

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


100pts 思路

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

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


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


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


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


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


通过对上面情况的分析,当前面的面包完好的情况下,只有当 10 10 10 情况出现时,面包段数会增加。
用数学语言表述就是 x = 1 + ∑ i = 1 n − 1 ( x i + x i + 1 − x i x i + 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 是特殊处理最前面 x 0 = 1 x_0=1 x0=1 的情况,其他的细节不多说,你会发现我们前面的定义:

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

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


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


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


第三项
∑ 1 ≤ i < n ∑ 1 ≤ j < n x i x i + 1 x j x j + 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 = j i=j i=j ( ∑ i = 1 n − 1 p i p i + 1 ) 2 − ∑ i = 1 n − 1 p i 2 p i + 1 2 + ∑ i = 1 n − 1 p i p i + 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 − 1 i=j-1 i=j1 ∑ 1 ≤ i ≤ n − 2 p i p i + 1 p i + 2 − ∑ i = 1 n − 2 p i p i + 1 2 p i + 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 + 1 i=j+1 i=j+1 ∑ 1 ≤ i ≤ n − 2 p i p i + 1 p i + 2 − ∑ i = 1 n − 2 p i p i + 1 2 p i + 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 = 1 n − 1 p i p i + 1 ) 2 − ∑ i = 1 n − 1 p i 2 p i + 1 2 + ∑ i = 1 n − 1 p i p i + 1 + 2 ∑ 1 ≤ i ≤ n − 2 p i p i + 1 p i + 2 − 2 ∑ i = 1 n − 2 p i p i + 1 2 p i + 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我们终于完成 1 2 \frac{1}{2} 21 了,然而我的脑细胞也被杀掉 1 2 \frac{1}{2} 21 了 😃。


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


第五项
也可以直接建立等式 − 2 ∑ i = 1 n − 1 x i x i + 1 = − 2 ∑ i = 1 n − 1 p i p i + 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 = 2 n − 1 p i ) ( ∑ i = 1 n − 1 p i p i + 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 = j i=j i=j 时,需要 − 2 ∑ i = 2 n − 1 p i 2 p i + 1 + 2 ∑ i = 2 n − 1 p i p i + 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 + 1 i=j+1 i=j+1 时,需要 − 2 ∑ i = 1 n − 2 p i p i + 1 2 + 2 ∑ i = 1 n − 2 p i p i + 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 = 2 n − 1 p i ) ( ∑ i = 1 n − 1 p i p i + 1 ) − 2 ∑ i = 2 n − 1 p i 2 p i + 1 + 2 ∑ i = 2 n − 1 p i p i + 1 − 2 ∑ i = 1 n − 2 p i p i + 1 2 + 2 ∑ i = 1 n − 2 p i p i + 1 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=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
不要忘记了前面我们省掉的 -


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

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值