Codeforces Round #362 (Div. 2)

6/6

这场CFdiv2有六题,拖了很久终于补完了。。。。撒花~~撒花~~

 

题A Pineapple Incident

题意:告诉你 t, t + s, t + s + 1, t + 2s, t + 2s + 1……周期地发生什么,给你t,s,k,问你k可不可能是其中的某个数?

题解:简单题,先判断k是不是t,然后判断k-t和k-t-1是不是s的倍数即可。

 

题B Barnicle

题意:给你一个科学计数法表示的浮点数,展开它。

题解:注意0的情况和1.0e0的情况即可。

 

题C Lorenzo Von Matterhorn

题意:给你一颗二叉树,然后告诉你会有两种操作:

1.u v w表示u到v的路径的边增加w

2.u v询问路径权值为多少

题解:暴力!暴力!暴力!直接开个map暴力放进去,从u和v不断往前爬知道公共祖先。询问也一样。

 

题D Puzzles

题意:给你一棵树,然后让你模拟dfs,但是dfs的时候如果有多个结点,那么则随机选一个结点去访问,最后问你每个点访问时间的期望,假设访问一个结点用时1s。

题解:我们可以这样考虑,采用平均的策略,即(最好+最坏)/ 2;

最好:马上找到一个结点,用时1s

最坏:访问完剩余子树再来访问这个子树,那么就是其他子树的结点;

所以最后答案为:(假设当前树的sz为s1,要算的子树的sz为s2)

(s1 - s2 + 1) / 2;

 

题E PLEASE

题意:给你三个杯子,然后把要猜的东西放在中间,然后随意把左右的杯子拿来交换,做n次,然后最后猜的是中间,问你中的概率?这个n很大,他给你k个数,a1……ak,这k个数乘起来表示n。

题解:杯子的所有情况:

2 -> 13 -> 2312 -> 13122313……

2的出现次数为0、2、2、6……

最后可以推出这个序列为an = 2^n-1 - an-1,因为一共有2^n种可能,所以答案为:

bn = an / 2 ^ n,最后化简得:

现在n = ,指数很大我们都用欧拉定理进行降幂,具体参考欧拉公式。因为这个mod是素数,所以我们可以把n % (mod - 2)来进行降幂。最后说一下这道题要求的输出方式:是把分子mod了之后分母mod了之后输出,但是这个分子分母来自于我们的推导公式,也就是分子 = an,分母 = 2 ^ n。

 

题F Legen...

题意:给你n个串,每个串有自己的权值,构造一个长度为l的串使得这个串的权值最大,这个串的权值是n个串出现一次就会加上相应的权值。

题解:这道题要用到倍增floyd的思想。

先安利一篇论文里面解释了为什么能够这样做:

俞华程《矩阵乘法在信息学中的应用》

这里简单复述一下:

假设dp[i][j]为当前长度为i,末尾为j结点(Ac自动机构造的),然后转移方程为:

 

然后假设g[i][j]为i结点到j结点增加的权值,那么就可以类似地得到下面的矩阵转移方程:

 

最后利用矩阵乘法加一下速即可。

 

原文地址:https://www.cnblogs.com/zhenhao1/p/5688784.html