2017 ccpc 秦皇岛站 B题 Expected Waiting Time (zoj3982)

题目链接:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3982

我们要求的就是x * y-1 % P

y = catalan( n ) % P

主要说说x怎么求:

对于一个长度为2n的序列,如果我们在这2n个数前面选择n个放+,n个放-,并且+-号的放置方式满足卡特兰序列,即满足所有前缀的+号个数 >= -号个数,我们记放置符号后的2n个数的和为S。

这x = catalan(n)种放置方式的S的和。

我们可以转化为对2n个位置求贡献。

对于第i个位置a[i],前面为+的方案数为f(i),则前面为-的方案数为catalan(n) - f(i),

对x的贡献:f(i) * a[i] - (catalan(n) - f(i)) * a[i]

问题是f(i)不会求,到stackoverflow上面也没有查到。

那就把+-号改为()括号,每次算的是2个位置组成一对的贡献a[r] - a[l]。

枚举长度len,再枚举(括号位置l,则r = l + len - 1,然后推推x的公式,

发现不用枚举l了,因为变成了前缀和。

所以x的公式就是枚举长度O(n)的复杂度了。

原文地址:https://www.cnblogs.com/-maybe/p/7768631.html