专栏文章
题解:P11316 [RMI 2021] 去 M / NoM
P11316题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mina7d5g
- 此快照首次捕获于
- 2025/12/01 23:05 3 个月前
- 此快照最后确认于
- 2025/12/01 23:05 3 个月前
来一个不要容斥的做法。
标号可以最后再乘,问题变为 个点两两配对,配对的距离不是 倍数的方案数,等价于不能让模 同余的配对。
设 表示前 个同余类,总共有 个要和后面的配对,的方案数。
设第 个同余类有 个点。转移就枚举第 个同余类和前面配多少对,对于 ,
每对的颜色有 种选择,编号是一个排列,答案就是 。
因为 ,所以复杂度是 。
CPPrep(i, 1, 2 * n)cnt[i % m]++;
f[0][0] = 1;
int sum = 0;
rep(i, 0, m - 1) {
rep(j, 0, sum)if (f[i][j]) {
rep(k, 0, min(j, cnt[i])) {
add(f[i + 1][j + cnt[i] - 2 * k], 1LL * f[i][j] * C(cnt[i], k) % mod * C(j, k) % mod * fac[k] % mod);
}
}
sum += cnt[i];
}
printf("%d", 1LL * f[m][0] * qpow(2, n) % mod * fac[n] % mod);
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...