您的位置:首页 > 大数据 > 人工智能

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

2017-11-01 21:37 309 查看
题目链接:
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)的复杂度了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: