[Luogu4916]魔力环[Burnside引理、组合计数、容斥]
题意
分析
代码
#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 bool Max(T &a, T b){return a < b ? a = b, 1 : 0;}
template <typename T> inline bool Min(T &a, T b){return a > b ? a = b, 1 : 0;}
const int N = 2e5 + 7, mod = 998244353;
int n, m, k, pc;
LL fac[N], inv[N], invfac[N];
int phi[N], low[N], pri[N];
void sieve(int n) {
phi[1] = 1;int to;
for(int i = 2; i <= n; ++i) {
if(!low[i]) low[i] = i, phi[i] = i - 1, pri[++pc] = i;
for(int j = 1; j <= pc && (to = i * pri[j]) <= n; ++j) {
low[to] = pri[j];
if(i % pri[j] == 0) {
phi[to] = phi[i] * pri[j];
break;
}
phi[to] = phi[i] * (pri[j] - 1);
}
}
}
LL C(int n, int m) {
return fac[n] * invfac[m] % mod * invfac[n - m] % mod;
}
void add(LL &a, LL b) {
a += b;
if(a >= mod) a -= mod;
}
LL put(int a, int b) {
if(!b) return 0;
LL res = 0;
for(int i = 0; i <= a / (k + 1); ++i)
add(res, (i & 1 ? mod - 1 : 1) * C(b, i) % mod * C(a - i * (k + 1) + b - 1, b - 1) % mod);
return res;
}
LL solve(int d) {
int c = m / (n / d); LL res = 0;
if(c <= k) return C(d, c);
for(int i = 0; i <= k; ++i)
add(res, (i + 1) * put(c - i, d - c - 1) % mod);
return res;
}
int main() {
n = gi(), m = gi(), k = gi();
if(n == m)
return puts(k < m ? "0" : "1"), 0;
sieve(n);
inv[1] = fac[0] = invfac[0] = 1;
rep(i, 1, 2 * n) {
if(i ^ 1) inv[i] = (mod - mod / i) * inv[mod % i] % mod;
fac[i] = fac[i - 1] * i % mod;
invfac[i] = invfac[i - 1] * inv[i] % mod;
}
LL ans = 0;
for(int i = 1; i <= n; ++i) if(n % i == 0 && m % (n / i) == 0)
add(ans, solve(i) * phi[n / i] % mod);
printf("%lld\n", ans * inv[n] % mod);
return 0;
}
[Luogu4916]魔力环[Burnside引理、组合计数、容斥]的更多相关文章
- [CTS2019]珍珠(NTT+生成函数+组合计数+容斥)
这题72分做法挺显然的(也是我VP的分): 对于n,D<=5000的数据,可以记录f[i][j]表示到第i次随机有j个数字未匹配的方案,直接O(nD)的DP转移即可. 对于D<=300的数 ...
- bzoj 2839 集合计数 容斥\广义容斥
LINK:集合计数 容斥简单题 却引出我对广义容斥的深思. 一直以来我都不理解广义容斥是为什么 在什么情况下使用. 给一张图: 这张图想要表达的意思就是这道题目的意思 而求的东西也和题目一致. 特点: ...
- bzoj2839: 集合计数 容斥+组合
2839: 集合计数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 523 Solved: 287[Submit][Status][Discuss] ...
- BZOJ 3294: [Cqoi2011]放棋子 计数 + 容斥 + 组合
比较头疼的计数题. 我们发现,放置一个棋子会使得该棋子所在的1个行和1个列都只能放同种棋子. 定义状态 $f_{i,j,k}$ 表示目前已使用了 $i$ 个行,$j$ 个列,并放置了前 $k$ 种棋子 ...
- BZOJ2839:集合计数(容斥,组合数学)
Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007. ...
- BZOJ.5407.girls/CF985G. Team Players(三元环计数+容斥)
题面 传送门(bzoj) 传送门(CF) \(llx\)身边妹子成群,这天他需要从\(n\)个妹子中挑出\(3\)个出去浪,但是妹子之间会有冲突,表现为\(i,j\)之间连有一条边\((i,j)\), ...
- SPOJ - AMR11H Array Diversity (水题排列组合或容斥)
题意:给定一个序列,让你求两种数,一个是求一个子序列,包含最大值和最小值,再就是求一个子集包含最大值和最小值. 析:求子序列,从前往记录一下最大值和最小值的位置,然后从前往后扫一遍,每个位置求一下数目 ...
- 【等价的穿越】Burnside引理&Pólya计数法
Problem 起源: SGU 294 He's Circle 遗憾的是,被吃了. Poj有道类似的: Mission 一个长度为n(1≤n≤24)的环由0,1,2组成,求有多少本质不同的环. 实际上 ...
- 数学(组合,容斥):COGS 1220. 盒子与球
1220. 盒子与球 ★ 输入文件:boxball.in 输出文件:boxball.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 现有r个互不相同的盒子和n ...
随机推荐
- Ubuntu快捷键、Ubuntu终端常用命令
Ubuntu快捷键 0.Ctrl + Alt + t 打开终端,在终端命令行操作 1. Ctrl + W: 关闭当前 Nautilus 窗口 2. Ctrl+T: 在 Nautilus 打开新的 Ta ...
- Tomcat映射虚拟路径到指定磁盘(eclipse)
用WangEditor富文本编辑,上传图片的时候,本文主要记录一下Tomcat映射虚拟路径到指定磁盘,保存到指定路径中,且能实现页面预览. 在实现之前wangeditor的简单实用请参照博主小道仙的后 ...
- Android Studio Git 分支使用实践
新公司有些项目是用的 Git,以前公司都是 svn,为了练手 Git,我个人 APP 用到了,但是仅简单的 git pull/push 的使用,并未用到 Git 精髓,只有当项目中用到,才会紧迫去全面 ...
- View体系之属性动画
(内容省略了valueAnimator和PropertyValueHolder使用) 属性动画的使用的主要方式是AnimatorSet和ObjectAnimator配合使用.ObjectAnimato ...
- 章节六、3-读取Properties属性文件
一.如何读取Properties文件1.创建一个名为ReadingProperties的类 2.创建一个.propertise属性的文件,创建的方式参考“二”中步骤 3.写入如下代码 package ...
- javascript的函数、事件
本文内容: 函数 函数的定义方式 函数的调用方式 函数的参数 匿名函数 函数中的this 事件 常见事件 绑定事件 首发日期:2018-05-11 函数: 函数的定义方式: 函数可以有参数,参数为局部 ...
- tkinter之grid布局管理器详解
在很久之前,我发过一篇<tkinter模块常用参数>,里面已经几乎涵盖了tkinter的大部分教程. 好吧,其实也就是上一篇而已啦. 所谓布局,就是指控制窗体容器中各个控件(组件)的位置关 ...
- servlet请求和响应的过程
1.加载 Servlet类被加载到Java虚拟机中,并且实例化.在这个过程中,web容器(例如tomcat)会调用Servlet类的公开无参构造函数,产生一个Servlet类的实例对象.默认情况下Se ...
- Dapp已来,如何把握区块链创富模式变化的趋势
区块链技术持续升温,Dapp迅速成为焦点,未来区块链市场上新的蓝海.这么说当然不是空想出来的,而是从区块链市场的发展趋势中推断而来.区块链市场由最初的挖矿炒币到如今尝试投入行业应用,随着技术和应用模式 ...
- mysql中导入导出sql文件
1.导出整个数据库: mysqldump -u用户名 -p密码 数据库名 > 导出的文件名 例:mysqldump -uroot -proot user > user.sql 2.导出一个 ...