题意

给你 \(n\) 个完全相同骰子,每个骰子有 \(k\) 个面,分别标有 \(1\) 到 \(k\) 的所有整数。对于\([2,2k]\) 中的每一个数 \(x\) 求出有多少种方案满足任意两个骰子的和都不为 \(x\) 的方案数。

分析

  • 对于每个 \(x\) ,考虑当 \(i\le x\) 时, \(i\) 和 \(x-i\) 只能出现一个。将他们看成同一种权值,数量记为 \(w\) ,剩余权值数量记位 \(cnt\) ,然后枚举有多少种特殊权值没出现 (\(ans\)) 并容斥:

\[ans_i=2^{w-i}\sum\limits_{j=i}^w(-1)^{j-i}\binom{n+cnt-j-1}{cnt-j-1}\binom{w}{j}\binom{j}{i}
\]

这样可以 \(O(n^3)\) 求解。

  • 考虑枚举 \(ans\) 的过程中和 \(j\) 这一项有关的内容:

    \[\begin{aligned}val_j&=\sum_\limits{i=0}^j(-1)^{j-i}\binom{n+cnt-j-1}{cnt-j-1}\binom{w}{j}\binom{j}{i}2^{w-i}\\&=(-1)^j\binom{w}{j}\binom{n+cnt-j-1}{cnt-j-1}2^w\sum_{i=0}^j\binom{j}{i}(-1)^{i}2^{-i}\\&=(-1)^j\binom{w}{j}\binom{n+cnt-j-1}{cnt-j-1}2^{w-j}\sum_{i=0}^j\binom{j}{i}(-1)^{i}2^{j-i}\\&=(-1)^j\binom{w}{j}\binom{n+cnt-j-1}{cnt-j-1}2^{w-j}(2-1)^j\end{aligned}
    \]

    可以 \(O(1)\) 求一个 \(val\) ,于是复杂度优化到了 \(O(n^2)\)

  • 注意当 \(x\) 为偶数时候单独讨论 \(\frac{x}{2}\) 这个权值。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define go(u) for(int i = head[u], v = e[i].to; i; i=e[i].lst, v=e[i].to)
#define rep(i, a, b) for(int i = a; i <= b; ++i)
#define pb push_back
#define re(x) memset(x, 0, sizeof x)
inline int gi() {
int x = 0,f = 1;
char ch = getchar();
while(!isdigit(ch)) { if(ch == '-') f = -1; ch = getchar();}
while(isdigit(ch)) { x = (x << 3) + (x << 1) + ch - 48; ch = getchar();}
return x * f;
}
template <typename T> inline void Max(T &a, T b){if(a < b) a = b;}
template <typename T> inline void Min(T &a, T b){if(a > b) a = b;}
const int N = 4007, mod = 998244353;
int n, K, ans;
int fac[N], invfac[N], inv[N], bin[N], suf0[N], suf1[N];
int C(int n, int m) {
if(n < m) return 0;
return 1ll * fac[n] * invfac[m] % mod * invfac[n - m] % mod;
}
void add(int &a, int b) {
a += b;if(a >= mod) a -= mod;
}
void solve(int n, int cnt, int w) {
for(int i = 0; i <= w; ++i)
add(ans, 1ll * (i & 1 ? mod - 1: 1) * C(n + cnt - i - 1, cnt - i - 1) % mod * C(w, i)% mod * bin[w - i] % mod);
}
int main() {
K = gi(), n = gi();
inv[1] = fac[0] = invfac[0] = 1, bin[0] = 1;
rep(i, 1, 4000) {
if(i ^ 1) inv[i] = 1ll * (mod - mod / i) * inv[mod % i] % mod;
fac[i] = 1ll * fac[i - 1] * i % mod;
invfac[i] = 1ll * invfac[i - 1] * inv[i] % mod;
bin[i] = 1ll * bin[i - 1] * 2 % mod;
}
rep(k, 2, 2 * K) {
ans = 0;
int w = min(k / 2, K - (k - 1) / 2), cnt = K - w;
if(k % 2 == 0 && K >= k / 2) {
solve(n, cnt, w - 1);
solve(n - 1, cnt, w - 1);
}
else solve(n, cnt, w);
printf("%d\n", ans);
}
return 0;
}

[arc102E]Stop. Otherwise...[容斥+二项式定理]的更多相关文章

  1. bzoj4487[Jsoi2015]染色问题 容斥+组合

    4487: [Jsoi2015]染色问题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 211  Solved: 127[Submit][Status ...

  2. Codeforces.997C.Sky Full of Stars(容斥 计数)

    题目链接 那场完整的Div2(Div1 ABC)在这儿.. \(Description\) 给定\(n(n\leq 10^6)\),用三种颜色染有\(n\times n\)个格子的矩形,求至少有一行或 ...

  3. 【BZOJ3622】已经没有什么好害怕的了(动态规划+广义容斥)

    点此看题面 大致题意: 有\(n\)个糖果和\(n\)个药片,各有自己的能量.将其两两配对,求糖果比药片能量大的组数恰好比药片比糖果能量大的组数多\(k\)组的方案数. 什么是广义容斥(二项式反演) ...

  4. 【BZOJ4487】[JSOI2015] 染色问题(高维容斥)

    点此看题面 大致题意: 有一个\(n*m\)的矩形,先让你用\(C\)种颜色给它染色.每个格子可染色可不染色,但要求每行每列至少有一个小方格被染色,且每种颜色至少出现一次.求方案数. 高维容斥 显然题 ...

  5. LOJ3120. 「CTS2019」珍珠 [容斥,生成函数]

    传送门 思路 非常显然,就是要统计有多少种方式使得奇数的个数不超过\(n-2m\).(考场上这个都没想到真是身败名裂了--) 考虑直接减去钦点\(n-2m+1\)个奇数之后的方案数,但显然这样会算重, ...

  6. Min-Max 容斥的证明

    这里有 Min-Max 容斥的证明以及唯一一道博主做过的例题... 上个结论: \[Min\{S\}=\sum_{T\subseteq S,T\not=\varnothing}(-1)^{|T|-1} ...

  7. 【题解】[HAOI2018]染色(NTT+容斥/二项式反演)

    [题解][HAOI2018]染色(NTT+容斥/二项式反演) 可以直接写出式子: \[ f(x)={m \choose x}n!{(\dfrac 1 {(Sx)!})}^x(m-x)^{n-Sx}\d ...

  8. [Codeforces 1228E]Another Filling the Grid(组合数+容斥)

    题目链接 解题思路: 容斥一下好久可以得到式子 \(\sum_{i=0}^{n}\sum_{j=0}^{n}(-1)^{i+j}C_n^iC_n^j(k-1)^{ni+nj-ij}k^{n^2-(ni ...

  9. luogu P4515 [COCI2009-2010#6] XOR 容斥

    LINK:XOR 一个不常见的容斥套路题. 以往是只求三角形面积的交 现在需要求被奇数次覆盖的区域的面积. 打住 求三角形面积的交我也不会写 不过这道题的三角形非常特殊 等腰直角 且直角点都在左下方 ...

随机推荐

  1. RBAC用户角色权限设计方案【转载】

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...

  2. [Windows] [Firewall] 增加进入规则

    netsh advfirewall firewall add rule name="Open Port 80" dir=in action=allow protocol=TCP l ...

  3. 自动代码质量分析(GitLab+JenKins+SonarQube)

    自动代码质量分析(GitLab+JenKins+SonarQube) 1.需求场景 开发提交代码自动执行代码质量分析. 2.所需应用 GitLab,JenKins,SonarQube 3.架构图 4. ...

  4. c语言:复合文字

    复合文字的意义,相当于是在C语言中,为数组类型定义了一种类似于8之于int,'w'之于char一样的常量类型,所以从C99之后,可以在一些地方使用复合文字来代替数组使用. 复合文字的声明 (]){,, ...

  5. 【未完成】[Spark SQL_2] 在 IDEA 中编写 Spark SQL 程序

    0. 说明 在 IDEA 中编写 Spark SQL 程序,分别编写 Java 程序 & Scala 程序 1. 编写 Java 程序 待补充 2. 编写 Scala 程序 待补充

  6. [Spark Core] 在 Spark 集群上运行程序

    0. 说明 将 IDEA 下的项目导出为 Jar 包,部署到 Spark 集群上运行. 1. 打包程序 1.0 前提 搭建好 Spark 集群,完成代码的编写. 1.1 修改代码 [添加内容,判断参数 ...

  7. [Python] 启动 uiautomatorviewer2之后,连接成功后重新 reload画面时提示 ('Connection aborted.', error(10054, ''))

    [问题] 出现该问题不管是重启手机还是启动手机里面 uiautomator的服务,都无济于事,只有通过下面方法进行重新初使化方能解决问题 [解决方法] 在命令窗口执行如下命令 python -m ui ...

  8. 一、git创建版本库及提交

    第一步:从Git官网直接   下载安装程序  ,并自行配置环境变量. git config --global user.name "Your Name" // 设置用户名 git ...

  9. 流式套接字:基于TCP协议的Socket网络编程(案例3)

    案例:在案例1的基础上将传输的字符串换成具体的对象. 客户端代码: package com.yh.SocketObject; import java.io.IOException; import ja ...

  10. MetaMask/provider-engine-2-代码

    package.json "main": "index.js", "scripts": { "test": " ...