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)的复杂度了。
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)的复杂度了。
相关文章推荐
- 2017 CCPC 秦皇岛站
- 2017 CCPC 秦皇岛 E - String of CCPC【规律】
- 2017 CCPC 秦皇岛 A:Balloon Robot
- 2017 CCPC 秦皇岛
- 2017 CCPC 秦皇岛 G题
- 2017 CCPC 秦皇岛 L - One-Dimensional Maze 【water】
- 2017 CCPC秦皇岛 D
- 2017 CCPC 秦皇岛 G Numbers 【贪心+大数+高精度】
- 2017 CCPC 秦皇岛
- 2017 CCPC 秦皇岛 M - Safest Buildings 【几何&概率】
- 2017 CCPC 秦皇岛
- 2017 ccpc 秦皇岛 M(几何)
- 2017 CCPC秦皇岛赛区比赛总结
- CCPC 2017 秦皇岛和杭州的总结
- 2017秦皇岛 - ICPC - E - String of CCPC 【string的一些简单运用,思维】
- ZOJ 3985 String of CCPC 2017秦皇岛CCPC(子串个数)
- 2017 ccpc 秦皇岛C Crusaders Quest
- 2017 CCPC秦皇岛 A题 A Ballon Robot
- 2017 ccpc 秦皇岛E String of CCPC
- 2017 CCPC 秦皇岛 & ZOJ 3981 - Balloon Robot 规律