LGP4916题解
第一眼,Burnside 直接丢上去啊。
设 \(f(n,m)\) 是有 \(n-m\) 个白色珠子和 \(m\) 个白色珠子的满足题意的环的个数,容易得到答案是:
\]
考虑左边这个 \(f\) 怎么做。
我们将环断开,枚举前缀和后缀的黑色珠子个数,有:
\]
其中 \(g(n,m)\) 为不存在超过 \(k\) 个连续黑色珠子的序列个数,且序列的最后一个元素是白色的。
我们似乎可以接受单次 \(O(n\log n)\) 计算 \(f\) 的算法。
考虑上生成函数。我们强制钦定每一段黑珠子后面跟上一个白珠子(包括 \(0\) 个白珠子),那么一段的 OGF 就是 \(\sum_{i=0}^{k}x^i=\frac{1-x^{k+1}}{1-x}\)。
\(g\) 的单点就是 \(g(n,m)=[x^m](\frac{1-x^{k+1}}{1-x})^{n-m}\)。
写开:
\]
\]
注意到你在单次处理时,这个 \(n-m\) 是一直不会变的。变的是多项式取哪一项。
直接把这两个东西写开,卷一下就好了。
我们再观察一下:
设 \(F(x)=\frac{1-x^{k+1}}{1-x}\)。
\]
\]
\]
\]
\]
\]
\]
右边简单。
\]
\]
\]
然后就能够线性求单点的 \(f\) 了。
#include<cstdio>
const int M=1e5+5,mod=998244353;
int n,m,k,fac[M],ifac[M];
inline int pow(int a,int b){
int ans(1);for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)ans=1ll*ans*a%mod;return ans;
}
inline int C(const int&n,const int&m){
return 1ll*fac[n]*ifac[m]%mod*ifac[n-m]%mod;
}
inline int phi(int n){
int ans(1);
for(int i=2;i<=n;++i)if(!(n%i)){
ans*=i-1;n/=i;while(!(n%i))ans*=i,n/=i;
}
return ans;
}
inline int f(const int&n,const int&m){
int ans(0);
for(int i=0;i<=n-m;++i){
if(m-i*(k+1)<0)break;
if(i&1)ans=(ans+1ll*(mod-C(n-m,i))*C(m-i*(k+1)+n-m-1,n-m-1))%mod;
else ans=(ans+1ll*C(n-m,i)*C(m-i*(k+1)+n-m-1,n-m-1))%mod;
}
return 1ll*n*pow(n-m,mod-2)%mod*ans%mod;
}
signed main(){
int ans(0);
scanf("%d%d%d",&n,&m,&k);
if(n==m)return printf("%d",m<=k),0;
fac[0]=fac[1]=ifac[0]=ifac[1]=1;
for(int i=2;i<=n;++i)fac[i]=1ll*fac[i-1]*i%mod,ifac[i]=1ll*(mod-mod/i)*ifac[mod%i]%mod;
for(int i=2;i<=n;++i)ifac[i]=1ll*ifac[i-1]*ifac[i]%mod;
for(int i=1;i<=n;++i)if(!(n%i)&&!(m%i))ans=(ans+1ll*f(n/i,m/i)*phi(i))%mod;
printf("%d",1ll*ans*pow(n,mod-2)%mod);
}
LGP4916题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- Tomcat 下载安装,启动,停止,注册服务,开机自启
感谢大佬:https://blog.csdn.net/wangmx1993328/article/details/81013715 目录 Tomcat 下载 startup.bat 启动 Tomcat ...
- mysql处理警告 Warning: Using a password on the command line interface can be insecure.
vim /etc/mysql/my.cnf [mysqldump] user=user_name password=password 格式: [只用密码的命令] user=用户名 password=密 ...
- Java线程--BlockingQueue使用
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871704.html Java线程--BlockingQueue使用 阻塞队列就是内容满了之 ...
- 转载_最值得阅读学习的10个C语言开源项目代码
"源代码面前,了无秘密",阅读优秀代码无疑是开发人员得以窥见软件堂奥而登堂入室的捷径.本文选取10个C语言优秀开源项目的代码作为范本,分别给予点评,免去东搜西罗之苦,点赞!那么问题 ...
- shell中的括号(小括号,大括号/花括号)
在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string ...
- NSTimer、CADisplayLink、GCD 三种定时器的用法 —— 昉
在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 在iOS中有很多方法完成定时器的任务,例如 NSTimer.CADisp ...
- 动态路由与RIP协议
动态路由与RIP协议 目录 动态路由与RIP协议 一.动态路由(Dynamic Route) 1.动态路由概述 2.动态路由特点 3.动态路由协议 (1)动态路由协议概述 (2)度量值 (3)收敛 4 ...
- JS IndexOf移除符合规则的一项
RemoveItem: function (val) { var index = selectedUsers.indexOf(val); if (index > -1) { selectedUs ...
- 洛谷P1098 [NOIP2007 提高组] 字符串的展开
题目链接:https://www.luogu.com.cn/problem/P1098 这个题出的真的很有质量,这个是我见过算是复杂的模拟题了,对付这种题,一丝都不能马虎,要想实现快捷而又简便的代码设 ...
- 2、Golang基础--包的使用、if-else语句、循环、switch语句、数组、切片、可变函数参数、map类型
1 包的使用 // 为了便于组织代码,同一种类型的代码,写在同一个包下,便于管理 // 定义包 -新建一个文件夹 -内部有很多go文件 -在每个go文件的第一行,都要声明包名,并且包名必须一致 -在一 ...