Day 7: MIPT Contest, GP of Dolgoprudny¶
排名 | 当场过题数 | 至今过题数 | 总题数 |
---|---|---|---|
17/76 | 4 | 4 | 11 |
A¶
upsolved by
题意¶
题解¶
B¶
upsolved by
题意¶
题解¶
C¶
upsolved by
题意¶
题解¶
D¶
solved by YZW
题意¶
题解¶
E¶
upsolved by
题意¶
题解¶
F¶
upsolved by
题意¶
题解¶
G¶
solved by JLK
题意¶
有\(n\)个人,每个人有一个硬币,硬币的两面有正整数\(a_i,b_i\)。现在我要造一枚硬币,如果两面的数字分别为\(a,b\),那么花费为\(a\times b\)。然后我和每个人各玩一次扔硬币游戏,比较谁的数字大,赢的人赚\(x_i\)钱,否则亏\(x_i\)钱(平局算我赢)。求最优策略下的期望收益(可能为负)。
\(1 \le n \le 2\times 10^5,1 \le a_i,b_i,x_i \le 10^9\)
题解¶
实际上我的硬币两面可以分开考虑。因为扔出每一面的概率都是\(\frac 12\),而两面是独立的。
设\(f(x)\)表示我扔出\(x\)数字时和别人比较赚的钱。这可以用一个差分得到。
那么对于一个\(a,b\),我最后的收益是\(\frac{f(a)+f(b)}2 -a\times b\)。要让这个最大。
分析一下这个式子,设\(\frac{f(a)+f(b)}2 -a\times b=m\),当\(a\)固定时,\(a\times 2b+m=f(a)+f(b)\),可以用类似于斜率优化DP的思路来求每个\(a\)的最大\(m\)。即把\((2b,f(b))\)看成点,然后求一个凸包,再扫一遍求切线的截距。显然可以用栈来维护,所以这一部分是线性的。
只有一开始离散化需要一个sort,故总复杂度为\(O(n\log n)\)。
H¶
solved by YZW
题意¶
题解¶
I¶
solved by JLK
题意¶
有\(2n+1\)个点编号为\([-n,n]\),一个人从0点开始走,有一个走路序列,第\(i\)次有\(p\)的概率不动,\(1-p\)的概率向左或向右(方向为给定序列里的方向,-1/1)走一格。他的家是所有点里等概率随机的一个,第一次走到家就结束。如果最后也没走到家就无了。求走到家的概率。
\(1 \le n \le 5000\)
题解¶
设\(f_{i,j}\)表示\(i\)时刻走到\(j\)的位置的概率,\(g_{i,j}\)表示\(i\)时刻恰好第一次走到\(j\)的概率。
由于每个点作为家的概率相同,只要第一次走到家就结束,所以答案就是\(\frac{\sum g_{i,j}}{2n+1}\)。
\(f_{i,j}\)可以简单递推求出。考虑用\(f\)推出\(g\),如果不是第一次走到,那么设第一次走到\(j\)的时刻是\(k\),这种情况被计算到\(g_{i,j}\)当且仅当\([k+1,i]\)的操作序列的和为0。用\(h_{k+1,i}\)表示这样和为0的概率。可以得到\(g_{i,j}=f_{i,j}-\sum\limits_{k=0}^{i-1}g_{k,j}\times h_{k+1,i}\)。
如果可以求出\(h\),那么这样计算是\(O(n^3)\)的。但是注意到答案只和\(\sum\limits_{i,j} g_{i,j}\)有关,记\(F_{i}=\sum\limits_{j}f_{i,j},G_i=\sum\limits_{j}g_{i,j}\)。那么答案为\(\sum\limits_{i=0}^n G_i\)。而\(G_i=F_i-\sum\limits_{k=0}^{i-1}G_k\times h_{k+1,i}\)。这样就可以\(O(n^2)\)求出\(G_i\)了。(实际上,在这种情况下,所有\(F_i=1\))
而对于\(h\),实际上一段操作\(sum=0\)的概率只和-1/1的个数有关,和-1/1的相对位置无关。可以看做是把-1和1拆开考虑,各选出等量的数走,剩下的不走。那么用\(H_{i,j}\)表示用了\(i\)个-1,\(j\)个1,\(sum=0\)的概率。
转移方程为\(H_{i,j}=p\times (H_{i-1,j}+H_{i,j-1})+(1-p)^2\times H_{i-1,j-1}-p^2\times H_{i-1,j-1}\)。
后面减去是因为\(H_{i-1,j-1}\)两个都不选的话转移到\(H_{i,j}\)会被算两次。
这样就可以\(O(n^2)\)解决了。注意卡常。
J¶
solved/upsolved by
题意¶
题解¶
K¶
solved/upsolved by
题意¶
题解¶
L¶
solved/upsolved by
题意¶
题解¶
记录¶
开局YZW过了H(0:35)。
跟榜看DI,都不太会写。D复杂度大了,在想优化。
JLK想到一个方法把log去掉了,准备开始写,但是YZW提出一个更好实现的方法,于是YZW写,然后过了(2:44)。
YZW写的过程中JLK和TYB会G了,但一开始想用李超线段树。看了看板子怕TLE,然后想到更好的办法,JLK开写,WA一次后AC(3:27)。
然后想I,一开始没有头绪,JLK口胡了一种方法,写着写着发现不对劲。不断改进后就可以了。TLE一次后AC(4:57)。
总结¶
Dirt¶
G(-1)
I(-1)