zoukankan      html  css  js  c++  java
  • 题解-P6667 [清华集训2016] 如何优雅地求和 [*hard]

    众所周知这题可以用斯特林数 (m^2) 求,但是要快速插值斯特林数等一堆东西估计过不了。

    (f(x) = sumlimits_{i = 0}^{m} inom{x}{i} s_i)(inom{x}{i})(i) 次多项式,因此存在这样的 (s)

    二项式反演:(f(x) = sumlimits_{i = 0}^{x} inom{x}{i} s_i Leftrightarrow s_x = sumlimits_{i = 0}^{x} inom{x}{i} (-1)^{x - i} f(i))

    通过卷积可以快速得到 (s) 数组。

    通过这个我们可以快速得到一个点的点值。

    (知道这个这题就不难了)

    推式子:

    [sumlimits_{k = 0}^{n} sumlimits_{i = 0}^{m}s_i inom{k}{i} inom{n}{k} x^k (1 - x)^{n - k} ]

    [sumlimits_{k = 0}^{n} sumlimits_{i = 0}^{m}s_i inom{k}{i} inom{n}{k} x^k (1 - x)^{n - k} ]

    [sumlimits_{k = 0}^{n} sumlimits_{i = 0}^{m} s_i inom{n}{i} inom{n - i}{k - i} x^k (1 - x)^{n - k} ]

    [sumlimits_{i = 0}^{m} s_i inom{n}{i} sumlimits_{k = i}^{n} inom{n - i}{k - i} x^k (1 - x)^{n - k} ]

    [sumlimits_{i = 0}^{m} s_i inom{n}{i} sumlimits_{k = 0}^{n - i} inom{n - i}{k} x^{k + i} (1 - x)^{n - k - i} ]

    [sumlimits_{i = 0}^{m} s_i inom{n}{i} x^i sumlimits_{k = 0}^{n - i} inom{n - i}{k} x^{k} (1 - x)^{n - i - k} ]

    [sumlimits_{i = 0}^{m} s_i inom{n}{i} x^i (x + 1 - x)^{n - i} ]

    [sumlimits_{i = 0}^{m} s_i inom{n}{i} x^i ]

    这样就可以很方便地做了。

    时间复杂度 (Theta(m log m))

    代码:

    int fac[N], ifac[N];
    void minit(int x) {
    	fac[0] = 1;
    	L(i, 1, x) fac[i] = (ll) fac[i - 1] * i % mod;
    	ifac[x] = qpow(fac[x]);
    	R(i, x, 1) ifac[i - 1] = (ll) ifac[i] * i % mod;
    }
    int fpow(int x) {
    	return x % 2 == 0 ? 1 : mod - 1;
    }
    int n, m, x, f[N], g[N], s[N], ans;
    int main() {
    	n = read(), m = read(), x = read();
    	minit(m), init(m << 1);
    	L(i, 0, m) f[i] = (ll) ifac[i] * fpow(i) % mod;
    	L(i, 0, m) g[i] = (ll) ifac[i] * read() % mod;
    	Mul(f, g, s, m + 1, m + 1);
    	L(i, 0, m) s[i] = (ll) s[i] * fac[i] % mod;
    	int now = 1;
    	L(i, 0, m) (ans += (ll) now * s[i] % mod * ifac[i] % mod) %= mod, now = (ll) now * x % mod * (n - i) % mod;
    	cout << ans << endl;
    	return 0;
    }
    

    祝大家学习愉快!

  • 相关阅读:
    Linux 磁盘挂载和mount共享
    Socket编程实践(8) --Select-I/O复用
    JavaScript 作用域链图具体解释
    扩展MongoDB C# Driver的QueryBuilder
    Gray Code
    Android网络编程Socket【实例解析】
    设计模式之:代理模式
    LOL英雄联盟代打外挂程序-java实现
    MySQL系列:innodb源代码分析之线程并发同步机制
    linux压缩打包
  • 原文地址:https://www.cnblogs.com/zkyJuruo/p/14320571.html
Copyright © 2011-2022 走看看