P5509 派遣
数论小杂烩(
由题意,对于每个士兵 \(i\),要么选,对答案产生 \(a_i(\frac{x}{i-x})\) 倍的贡献,要么不选,对答案产生 \(1\) 倍的贡献。
由此可知每个士兵之间是独立的,不相互影响,则根据乘法原理,答案应为
\]
。大力展开,即
\]
,即
\]
。不妨将分子分母拆开来看:
分子:
\[\prod_{i=0}^{n-1}\prod_{j=0,ik+j\neq0}^{k-1}ij
\],即
\[(nk-1)!
\]。
分母:Markdown 渲染好像不太行。。。
|\(i/j\)|\(0\)|\(1\)|\(2\)|\(\cdots\)|\(k-1\)
|:-:-:-:-:-:-:-
|\(0\)|/|\(1\)|\(2\)|\(\cdots\)|\(k-1\)
|\(1\)|\(k-1\)|\(k-1+1\)|\(k-1+2\)|\(\cdots\)|\(2(k-1)\)
|\(2\)|\(2(k-1)\)|\(2(k-1)+1\)|\(2(k-1)+2\)|\(\cdots\)|\(3(k-1)\)
|$\cdots\ \(|\)\cdots\(|\)\cdots\(|\)\cdots\(|\)\cdots\(|\)\cdots\(|
|\)n-2\(|\)(n-2)(k-1)\(|\)(n-2)(k-1)+1\(|\)(n-2)(k-1)+2\(|\)\cdots\(|\)(n-1)(k-1)\(
|\)\ \ n-1\ \ \(|\)\ \ (n-1)(k-1)\ \ \(|\)\ \ (n-1)(k-1)+1\ \ \(|\)\ \ (n-1)(k-1)+2\ \ \(|\)\ \ \cdots\ \ \(|\)\ \ n(k-1)\ \ $不难发现 \(1\sim n(k-1)\) 各出现了一次,且每一行的第一个数与上一行的最后一个数相等,即 \(k-1\),\(2(k-1)\),\(\cdots\),\((n-1)(k-1)\) 多出现了一次。
那么分母为
\[[n(k-1)]!\times \prod_{i=1}^{n-1}i(k-1)
\],即
\[(nk-k)!\times (k-1)^{n-1}\times (n-1)!
\]。
综上,可知答案为:
\]
。但是 \(nk\) 已经达到了 \(10^{18}\) 的数量级,怎么求这玩意的阶乘?
求 \(v!\ (v>10^8)\) 模 \(p\ (p<10^8)\):
抓住模数 \(p=1145141\),对 \(1\sim v\) 的每个数取模,最终会得到 \(\left\lfloor \dfrac{v}{p}\right\rfloor\) 个 \(0\sim p-1\) 和 \(1\sim (v\bmod p)\)。
将所有 \(p\) 的倍数除以 \(p\),得到 \(\left\lfloor \dfrac{v}{p}\right\rfloor\) 个 \(1\sim p-1\) 和 \(1\sim (v\bmod p)\) 和 \(1\sim \left\lfloor \dfrac{v}{p}\right\rfloor\)。
则答案为
\]
,预处理 \(1\sim p-1\) 的阶乘,用递归 + 快速幂即可做到 \(\mathcal O(\log v)\) 计算。
根据威尔逊定理 \((p-1)!\equiv -1\ (\bmod\ p),p\in \rm{prime}\),原答案可化简为
\]
,这样可以做到 \(\mathcal O(\log_p v)\) 计算,可以近似看做常数。
代码:
ll cal(ll v){return v<mod?fc[v]:fc[v%mod]*((v/mod)&1?-1:1)%mod*cal(v/mod)%mod;}
接下来计算出分子和分母各含有多少个 \(p\):
- \(v!\):一般的,\(v!\) 中含有质因子 \(p\) 的个数应为 \(\sum_{i=1,v\geq p^i}\left\lfloor \dfrac{v}{p^i}\right\rfloor\),但此处 \(v<p^3\),则可以化简为 \(\left\lfloor \dfrac{v}{p}\right\rfloor+\left\lfloor \dfrac{v}{p^2}\right\rfloor\)。
- \((k-1)^{n-1}\):
- 当 \(p\mid k-1\) 时,\(p\) 的个数为 \(n-1\),此时一定无解(即输出 \(\tt{-1}\)),读者自证不难。
- 当 \(p\nmid k-1\) 时,\(p\) 的个数为 \(0\),此时一定有解,读者自证不难。
综上,特判掉 \(p\mid k-1\) 的情况,记 \(c\) 为最终答案含有质因子 \(p\) 的个数,则
\]
,可以证明 \(c\geq 0\)。
那么,当 \(c>0\) 时,\(ans\equiv 0\ (\bmod\ p)\),输出 \(0\) 即可,否则计算上文推出的答案:
\]
。计算快速幂时根据费马小定理将质数 \(n-1\) 模 \(p-1\),时间复杂度 \(\mathcal O(p+t\log p)\)。
代码片段:
ll ksm(ll a,ll b){
ll s=1,m=a;
while(b){
if(b&1)s=s*m%mod;
m=m*m%mod,b>>=1;
} return s;
} ll inv(ll x){return ksm(x%mod,mod-2);}
ll t,n,k,fc[mod+5];
ll cal(ll v){return v<mod?fc[v]:fc[v%mod]*((v/mod)&1?-1:1)%mod*cal(v/mod)%mod;}
int main(){
cin>>t,fc[0]=1;
for(int i=1;i<mod;i++)fc[i]=fc[i-1]*i%mod;
while(t--){
n=read(),k=read();
if(n==1)pc('1');
else if((k-1)%mod==0)pc('-'),pc('1');
else{
ll l=n*k-n,r=n*k-1;
if(r/mod+r/mod/mod>l/mod+l/mod/mod+(n-1)/mod)pc('0');
else print(cal(r)*inv(cal(l))%mod*inv(ksm(k-1,(n-1)%(mod-1))*cal(n-1))%mod);
} pc('\n');
}
return flush(),0;
}
求赞 qwq。
P5509 派遣的更多相关文章
- 洛谷 P5509 派遣
题目传送门 心路历程: 每想到一种思路,就有一种要做出来的感觉.但一接着想就会发现这种方法有一些极小的问题,但是我没法解决... 于是就再换思路... 最后在请教了出题人神仙zcq之后,终于做出来了 ...
- 【BZOJ-2809】dispatching派遣 Splay + 启发式合并
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2334 Solved: 1192[Submi ...
- APIO2012派遣
2809: [Apio2012]dispatching Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1196 Solved: 586[Submit ...
- 派遣例程与IRP结构
提到派遣例程,必须理解IRP(I/O Request Package),即"输入/输出请求包"这个重要数据结构的概念.Ring3通过DeviceIoControl等函数向驱动发出I ...
- 数据结构,可并堆(左偏树):COGS [APIO2012] 派遣
796. [APIO2012] 派遣 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且 ...
- IRP派遣操作
IRPTrace工具跟踪IRP 派遣函数(Dispathc Funtion)是windows驱动中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式 ...
- IRP 与 派遣函数
什么是派遣函数: 派遣函数是 WIndows 驱动程序中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.也就是说,派遣函数是用来处理驱动程序提交过来的 I ...
- 《Windows驱动开发技术详解》之派遣函数
驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同 ...
- [APIO 2012]派遣
Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且仅有一个上级.为 ...
随机推荐
- HCIP-RSTP
端口角色 根端口(RP): 非根桥收到最优的BPDU配置信息的端口为根端口,(到根桥开销最小的端口),根桥没有根端口. 指定端口(DP): 两非根交换机之间连接的两个端口必有一个为指定端口,比较两个非 ...
- 分库分表利器之Sharding Sphere(深度好文,看过的人都说好)
Sharding-Sphere Sharding-JDBC 最早是当当网内部使用的一款分库分表框架,到2017年的时候才开始对外开源,这几年在大量社区贡献者的不断迭代下,功能也逐渐完善,现已更名为 S ...
- 【UE4 材质】一些小功能
利用材质实现物体自转 物体外轮廓高亮 使用postprocess+custom depth(防遮挡) https://www.tomlooman.com/soft-outlines-in-ue4/ h ...
- Wireshark 过滤器的使用
符号 例子 = = tcp.port = = 80 过滤出来TCP包含80端口的数据包 != ip.src != 127.0.0.1 ip的原地址不是127.0.0.1过滤出来 > lp.len ...
- 分布式表示(Distributed Representation)
NLP模型笔记 - 分布式表示 ziuno 2020-03-08 19:52:50 410 收藏 2 分类专栏: NLP 模型 笔记 文章标签: nlp 最后发布:2020-03-08 19:52:5 ...
- OO课第三单元总结
一.梳理JML语言的理论基础 (1)理论基础 JMl的出现很大程度上一为了行为接口的规范化,用这种语言来指定特定模块的特定功能.JML的核心部分分为三个部分:前置条件(requires).后置条件(e ...
- 2021.8.14考试总结[NOIP模拟39]
T1 打地鼠 全场就俩人没切,还有一个是忘关$freopen$了. $code:$ 1 #include<bits/stdc++.h> 2 #define rin register sig ...
- vs2015 MSB600 "inf2cat.ext"已退出,代码为2
使用vs2015编译XDMA驱动过程中,报如下错误: vs2015 MSB600 "inf2cat.ext"已退出,代码为2 在使用Qt编译PCIE码表的过程中,出现C1038:无 ...
- 问题解决:补充安装c语言的库函数和系统调用man手册
问题解决:补充安装c语言的库函数和系统调用man手册 今日份麻麻~上课时大家的Ubuntu都可以通过man查到关于stat的库函数,但是我的Kali查出来是这样: 询问老师之后得知需要去安装相 ...
- Docker 部署前后端项目
Docker 部署前后端项目 平生不会相思,才会相思,便害相思. 简介:都是被逼的,从零开始一个Docker 部署九个微服务和三个前端项目.其中,这些服务需要用到Nacos.MySQL.Nginx.E ...