首页 > 其他分享 >【题解】CF997C Sky Full of Stars

【题解】CF997C Sky Full of Stars

时间:2023-02-11 10:22:04浏览次数:50  
标签:Full limits 题解 sum Sky 反演 base choose 二项式

简记一下高维二项式反演的套路。

思路

高维二项式反演。

首先意识到 \(n \leq 10^6\) 且计数,并且求 “至少”,所以考虑用二项式反演处理。

这里如果用一维的二项式反演,可能要把行和列看成物品然后合并去重,比较麻烦,可以直接上二维二项式反演。


二维二项式反演结论:

\(F(N, M) = \sum\limits_{i = n}^N \sum\limits_{j = m}^{M} {N \choose i} {M \choose j} G(i, j) \Leftrightarrow G(N, M) = \sum\limits_{i = n}^N \sum\limits_{j = m}^{M} (-1)^{(N - i) + (M - j)} {N \choose i} {M \choose j} F(i, j)\).

具体证明考虑套两次二项式反演或者容斥系数。


所以考虑二项式反演的计数套路。

令 \(F(i, j)\) 为钦定有 \(i\) 行 \(j\) 列同色,其余任意染色的方案总数,\(G(i, j)\) 为刚好有 \(i\) 行 \(j\) 列同色的方案总数。

考虑求出 \(F\) 再通过二维二项式反演求出 \(G\).

\(F\) 因为同色具有传递性,行和列又可能相交,所以需要分类讨论:

  • \(i, j \neq 0\)

    此时钦定的行和列都必定是同一种颜色。

    \(F(i, j) = 3 {N \choose i} {N \choose j} 3^{(N - i)(N - j)}\).

  • \(i \neq 0, j = 0\) 或 \(i = 0, j \neq 0\)

    此时两种情况是对称的,求一种就行。

    当 \(i \neq 0, j = 0\) 时 \(F(i, j) = {N \choose i} 3^{i} 3^{N (N - i)}\).

  • \(i = j = 0\)

    此时任意染色,总数为 \(3^{n^2}\).

考虑代入二项式反演的式子。

  • 当贡献函数为分段函数时,考虑将 \(\sum\) 拆成对每段求和。

于是分讨一下:

  • \(i, j \neq 0\) 的贡献

\(\sum\limits_{i = 1}^N \sum\limits_{j = 1}^N (-1)^{i + j} 3 {N \choose i} {N \choose j} 3^{(N - i)(N - j)}\).

把幂次拆开整理得 \(3^{N^2 + 1} \sum\limits_{i = 1}^N {N \choose i} (-1)^i 3^{-iN} \sum\limits_{j = 1}^N {N \choose j} (-1)^j 3^{-jN} 3^{ij}\).

这里凑二项式定理的步骤比较仙。

\(3^{N^2 + 1} \sum\limits_{i = 1}^N {N \choose i} (-1)^i 3^{-iN} \sum\limits_{j = 1}^N {N \choose j} (-1)^j 3^{j(i - N)}\).

因为 \(\sum\limits_{j = 1}^N {N \choose j} (-1)^j 3^{j(i - N)} = \sum\limits_{j = 1}^N {N \choose j} 1^{N - j} ((-3)^{i - N})^j = (1 - 3^{i - N})^N - 1\).

于是代入化简得贡献为 \(3^{N^2 + 1} \sum\limits_{i = 1}^N {N \choose i} (-1)^i 3^{-iN} ((1 - 3^{i - N})^N - 1)\).

  • \(i \neq 0, j = 0\) 的贡献

很容易推出是 \(2 \cdot 3^{N^2} ((1 - 3^{1 - N})^N - 1)\)

  • \(i = j = 0\) 的贡献

\(3^{N^2}\).

直接快速幂大力做。

代码

#include <cstdio>
using namespace std;

typedef long long ll;

const int maxn = 1e6 + 5;
const int mod = 998244353;

int n;
int fac[maxn], invf[maxn];

ll qpow(ll base, ll power)
{
    ll res = 1;
    base = (base + mod) % mod;
    while (power)
    {
        if (power & 1) res = res * base % mod;
        base = base * base % mod, power >>= 1;
    }
    return res;
}

void init(int lim)
{
    fac[0] = invf[0] = fac[1] = invf[1] = 1;
    for (int i = 2; i <= lim; i++) fac[i] = 1ll * fac[i - 1] * i % mod, invf[i] = 1ll * (mod - mod / i) * invf[mod % i] % mod;
    for (int i = 2; i <= lim; i++) invf[i] = 1ll * invf[i - 1] * invf[i] % mod;
}

int C(int n, int m) { return 1ll * fac[n] * invf[m] % mod * invf[n - m] % mod; }

int main()
{
    scanf("%d", &n);
    init(n);
    int ans = 0;
    for (int i = 1; i <= n; i++)
    {
        int coe = C(n, i);
        int pw1 = qpow(3, 1ll * (mod - 1 - i) * n % (mod - 1));
        int pw2 = (qpow(1 - qpow(3, mod - 1 + i - n), n) - 1 + mod) % mod;
        int val = 1ll * coe * pw1 % mod * pw2 % mod;
        if (i & 1) ans = (ans - val + mod) % mod;
        else ans = (ans + val) % mod;
    }
    ans = 1ll * ans * qpow(3, (1ll * n * n + 1) % (mod - 1)) % mod;
    // printf("debug %lld\n", ans);
    int coe = (qpow(1 - qpow(3, mod - n), n) - 1 + mod) % mod;
    int sum = 2ll * qpow(3, 1ll * n * n % (mod - 1)) % mod % mod;
    ans = (ans + 1ll * coe * sum % mod) % mod;
    printf("%d\n", (mod - ans) % mod);
    return 0;
}

标签:Full,limits,题解,sum,Sky,反演,base,choose,二项式
From: https://www.cnblogs.com/lingspace/p/cf997c.html

相关文章

  • 【题解】P4464 [国家集训队] JZPKIL
    仙气飘飘莫反题。显现出了很多推式子习惯的问题。思路莫反+伯努利数+Pr。首先根据\(\operatorname{lcm}(x,y)=\frac{xy}{\gcd(x,y)}\)可以化简:\(\sum\limits......
  • P9033题解
    P9033「KDOI-04」XORSum题解题目链接传送门题意简述构造一个长度为\(n\),值域为\([0,m]\)的异或和为\(k\)的序列,如果不存在则输出\(-1\)。题目分析首先很容易......
  • CF1268B题解
    CF1268B题解题目翻译给你一个杨表,用一个有\(n\)个元素的数组\(a\)表示杨表每一列的高度。你需要用\(1\times2\)或\(2\times1\)的骨牌填充这个杨表,求出最多......
  • 题解:[PA2021] Drzewo czerwono-czarne
    题目链接:[PA2021]Drzewoczerwono-czarne首先对于起始和终止相同以及起始中只有一种颜色并且终止和起始不相同这两种情况是平凡的。考虑最后一步,一定是将某一条边上的一......
  • 【THM】Skynet-练习
    THM-Skynet-练习本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/skynet通过学习相关知识点:攻破目标靶机并完成提权操作。部署并渗透目标机器step1使用Nm......
  • skywalking
    1.链路追踪介绍2.skywalking是什么2.1链路追踪框架对比2.2性能对比2.3skywalking主要功能特性3.skywalking搭建3.1安装elasticsearch7.13.13.2sk......
  • CF1296D 题解
    题目传送门简单题做了好久,哈哈。题目分析首先,对于单个怪物,先将它的血量通过取余处理到小于\(a+b\)的时候,因为无论怪物血量多少,如果大于\(a+b\),显然不可能出现最后一......
  • 关于node-sass和sass-loader版本不兼容的问题解决
    安装node-sass和sass-loader时,提示我版本不兼容如:ValidationError:Invalidoptionsobject.SassLoaderhasbeeninitializedusinganoptionsobjectth......尝试......
  • 问题解决:WARNING!The remote SSH server rejected X11 forwarding request.
    截图解决X11forwarding依赖xorg-x11-xauth软件包,安装xorg-x11-xauth软件包。yuminstallxorg-x11-xauth-y安装后重新连接即可......
  • 【题解】P5278 算术天才⑨与等差数列
    有趣的乱搞做法和一个没想到的trick,一起记一下。思路线段树+哈希/trick.首先是乱搞做法。意识到可以像P3792由乃与大母神原型和偶像崇拜那个被疯狂hack的题......