2019.09.04【NOIP提高组】模拟

T1:这题较为简单。

正解类似于斜率优化。先把a从小到大排序,然后推一下式子,最后把x>0和x<0分开处理就好了。

T2:神奇的期望题。

首先我们发现,对于一个a[i](i>1)和a[1],当我们考虑只有这两个数时算出答案,然后再把所有的答案加起来就是总的答案。

但是为什么呢?我的理解大概是这样的:

考虑原先的答案是怎样算的,ans=sum(1/p*len),p表示走到当前状态的概率,len表示当前走的长度。

首先len=b[1]+b[2]...+b[n](b为每一个数实际选了多少次),那么1/p*len=1/p*(b[1]+b[2]...+b[n]),所以len是可以拆分成每一个数来算的。

关键是1/p为什么能拆分。1/p表示当前的概率,固然它和其他的a的值有关,但是在最终求ans时我们把它求和了,所以1/p的总和实际上就是只考虑a[1]和a[i]时构成当前b[1]和b[i]的概率。

至此,我们就发现1/p和len都是能拆分的,所以开头的做法就是对的。其实很难理性证明,只能感性理解一下。

那么现在问题就转换成了如何求只有a[1]和a[i]的答案。我们可以转换一下模型:原问题就相当于在一个a[1]*a[i]的网格上从(0,0)开始出发,每次等概率向上或向右走,走到最右边那一列(即a[1]减成0了)或最上的一行(即a[i]减成0了)时停止,问期望步数。

扫描二维码关注公众号,回复: 8671833 查看本文章

接着分类讨论一下:

1、如果是在a[i]还未减成0时就停止了,设a[i]剩下j,那么贡献就是(a[i]-j)/p。

2、如果是在a[1]还未减成0时就停止了,那么贡献就是a[i]/p。

总的来说,ans=\sum [j*(\frac{\binom{a[1]+j-1]}{j}}{2^{a[1]+j]}})]+a[i]*(1-\sum \frac{\binom{a[1]+j-1]}{j}}{2^{a[1]+j]}}) (1<=j<a[i]])

观察一下我们发现,如果a[i]递增的话,这个式子每次只会增加一项。那么我们就可以把a[i]排序,从小到大计算答案就可以了。

最后别忘了ans要加上a[1]。

T3:题解待更新。

发布了149 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chiyankuan/article/details/100675959