首页 > 其他分享 >P3773 CTSC2017 吉夫特

P3773 CTSC2017 吉夫特

时间:2022-12-21 09:00:30浏览次数:58  
标签:lfloor frac dbinom int rfloor P3773 夫特 CTSC2017

P3773 CTSC2017 吉夫特 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

这个题面非常诈骗,应该是出题者故意的。

题目中那么老长串式子,其实就等价于这个长度为 \(m\) 的子序列需要满足:

这个子序列中,对于每一对相邻的前后项(总共 \(m - 1\) 对),设前项是 \(a\),后项是 \(b\),都有:

\[\dbinom{a}{b} \bmod 2 = 1 \]

至于不上升的限制,那是假的:如果中途上升,也就是存在 \(a < b\),显然会有 \(\dbinom{a}{b} = 0\),已经不满足题目的制约了。

我们考虑使用 Lucas。有:

\[\dbinom{a}{b} \equiv\dbinom{\lfloor\frac{a}{2}\rfloor}{\lfloor\frac{b}{2}\rfloor}\dbinom{a \bmod 2}{b \bmod 2} \pmod 2 \]

发现后面的组合数只有四种,分别是 \(\dbinom{0}{0}\),\(\dbinom{0}{1}\),\(\dbinom{1}{0}\),\(\dbinom{1}{1}\)。除了 \(\dbinom{0}{1} = 0\) 以外,剩下的均为 \(1\)。

然后接着对 \(\dbinom{\lfloor\frac{a}{2}\rfloor}{\lfloor\frac{b}{2}\rfloor}\) Lucas。我们发现这不就是在对 \(a\) 和 \(b\) 二进制拆位吗。

换句话说,设 \(a_i\) 表示 \(a\) 的二进制从低到高第 \(i\) 位,那么有:

\[\dbinom{a}{b} \equiv \dbinom{a_0}{b_0}\dbinom{a_1}{b_1} \dbinom {a_2}{b_2} \cdots \pmod 2 \]

显然当且仅当中间没出现过 \(\dbinom{0}{1}\) 这一项,整个同余式最后会和 \(1\) 同余。

也就是说,不存在某一位使得 \(a\) 在这一位上是 \(0\) 而 \(b\) 在这一位上是 \(1\)。

想一下,这不就是在说 \(b\) 所有为 \(1\) 的二进制位是 \(a\) 所有为 \(1\) 的二进制位的子集吗。

简单刷表 dp 就可以了。

const int maxa = 250005;
const int mod = (int)1e9 + 7;

int f[maxa];

signed main() {
    int n = read(), ans = 0;

    for (int i = 1; i <= n; ++i) {
        int x = read();
        for (int j = (x & (x - 1)); j; j = (x & (j - 1)))
            (f[j] += f[x] + 1) %= mod;
        (ans += f[x]) %= mod;
    }

    printf("%lld\n", ans);
    return 0;
}

标签:lfloor,frac,dbinom,int,rfloor,P3773,夫特,CTSC2017
From: https://www.cnblogs.com/crab-in-the-northeast/p/luogu-p3773.html

相关文章

  • P3773 [CTSC2017]吉夫特
    发现只要式子中有一个数为奇数,整个式子就为\(0\)。把膜数代到每一乘积项中,容易发现这个东西就是一个\(\text{Lucas}\)定理。卢卡斯定理有一个性质,那就是如果膜数是\(......
  • 「CTSC2017」游戏
    题目点这里看题目。按照如下方式生成一个长度为\(n\)的\(01\)串\(s\):\(s_1\)由一个参数\(p_1\)决定,表示\(s_1\)有\(p_1\)的概率为\(\texttt1\),有\(1-......
  • [CTSC2017]游戏
    linkSolution其实问题在于当你确定了后面的一个数之后因为不独立,所以会影响前面的概率,所以这时候我们就需要贝叶斯公式去计算了。因为我们最后需要算的是期望赢的次数,所......