ProjectEuler 430 - Range flips
problem 在此
根据 可以知道答案就是每个格子为白色格子的期望和。
对于第 个格子,我们知道某次被翻转的几率是
令 表示 次翻转后仍然是白色的概率,可以得到
可以化出
于是有
如果暴力做的复杂度是 。然后一个很小的优化是如果 ,那么 ,直接忽略不计了……
然后要跑 3min 才跑得出来。
如果有更好的做法求告诉我 >__<
(版面不够了于是只好用 display equation 来充版面么 LOL)
problem 在此
根据 E(∑Xi)=∑E(Xi) 可以知道答案就是每个格子为白色格子的期望和。
对于第 1≤i≤n 个格子,我们知道某次被翻转的几率是
p=n22i(n+1−i)−1令 fk 表示 k 次翻转后仍然是白色的概率,可以得到
f∗0=0,f∗k+1=(1−p)fk+p(1−fk)可以化出
f_k+1−21=(1−2p)(fk−21)于是有
fk=21(1+(1−2p)k)如果暴力做的复杂度是 O(1010log4000) 。然后一个很小的优化是如果 1−2p≤0.99 ,那么 (1−2p)k≤10−18 ,直接忽略不计了……
然后要跑 3min 才跑得出来。
如果有更好的做法求告诉我 >__<
(版面不够了于是只好用 display equation 来充版面么 LOL)