zoukankan      html  css  js  c++  java
  • CF1204E

    神仙计数题啊。(或者是我计数太烂了?)


    首先这个最大前缀和的很难融入到计数里面,很自然的想到对每个最大前缀和计数然后乘起来相加。

    最大前缀和恰好等于某数比较难,套路地按差分思想计算最大前缀和小于等于某数的序列个数。但思考无果(

    考虑正难则反,求至少有一个位置的前缀和大于等于该数的序列个数。由于起点从零开始,只要算至少有一个位置的前缀和等于该数的序列个数,即画成折线后穿过 (y=i) 的个数。

    首先如果 (n-mgeq i),那么根据离散版的拉格朗日中值定理或者按照图形直观理解,知道所有序列都满足,答案就是 (dbinom{n+m}n)。否则只需要考虑 (n-m<i)

    考虑容斥?考虑仅让第一次到达 (i) 的位置做贡献?都思考无果,最好可以做到 FFT 优化的平方对数。下面就是很神仙的一步了!考虑转化,把至少穿过一次 (y=i) 的折线这样一个不好数的东西转化成另一个东西。我们发现将这样的折线第一次穿过 (y=i) 前面的部分按 (y=i) 翻折依然连续,否则不可能连续。那么容易得到 (2i o n-m) 的折线和这样的折线形成双射。而这是好算的!就是 (dbinom{n'+m'}{n'}),其中 (n',m') 解个方程就可以出来。

    时间复杂度平方或线性。

    P.S. 解方程过程:(n'-m'=n-m+2i,n'+m'=n+m),解得 (n'=n+i,m'=m-i)。(bzd 是哪个毒瘤管理员连二元一次方程组的解法也要求放在紫题题解里/kel/kel)

    珍爱生命,远离抄袭!
  • 相关阅读:
    Leetcode Plus One
    Leetcode Swap Nodes in Pairs
    Leetcode Remove Nth Node From End of List
    leetcode Remove Duplicates from Sorted Array
    leetcode Remove Element
    leetcode Container With Most Water
    leetcode String to Integer (atoi)
    leetcode Palindrome Number
    leetcode Roman to Integer
    leetcode ZigZag Conversion
  • 原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-cf1204e.html
Copyright © 2011-2022 走看看