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以外,每名忍者都有且仅有一个上级.为 ...
随机推荐
- 想要彻底搞懂大厂是如何实现Redis高可用的?看这篇文章就够了!(1.2W字,建议收藏)
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...
- Egg.js学习与实战系列 · Post请求`csrf token`问题
在使用axios请求egg.js封装的post接口时出现missing csrf token 或 invalid csrf token.踩过坑的新手估计不在少数,本篇记录一下解决方法. 问题原因 引用 ...
- Java:AQS 小记-1(概述)
Java:AQS 小记-1(概述) 概述 全称是 Abstract Queued Synchronizer(抽象队列同步器),是阻塞式锁和相关的同步器工具的框架,这个类在 java.util.conc ...
- undefined reference to `recvIpcMsg(int, ipc_msg*)'——#ifdef __cplusplus extern "C" { #endif
最近在弄一个进程间通信,原始测试demon用c语言写的,经过测试ok,然后把接口封装起来了一个send,一个recv. 使用的时候send端是在一个c语言写的http服务端使用,编译ok没有报错,但是 ...
- 一从二主IIC连接调试
最近有个项目需要实现快速开机出摄像头预览(2s内),但是我的板子linux上的qt应用起来都要10s左右了,于是在硬件上增加了一个屏驱芯片TW8836,这是一个mcu,可以直接获取摄像头数据送到lcd ...
- 构建乘积数组 牛客网 剑指Offer
构建成绩数组 牛客网 剑指Offer 题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...*A[i-1]A[i ...
- 矩形覆盖 牛客网 剑指Offer
矩形覆盖 牛客网 剑指Offer 题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution: ...
- gas-station leetcode C++
There are N gas stations along a circular route, where the amount of gas at station i isgas[i]. You ...
- 关于dns服务工作的原理,和配置的细节理解。
dns服务器相关 1,dns原理,也就是迭代,和递归查询.将域名解析为ip的过程. 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Loc ...
- 西邮Linux兴趣小组第一次技术分享会
2016年10月30日晚,西邮Linux兴趣小组技术分享会在西安邮电大学长安校区东区逸夫教学楼FF305室成功举办.200多名来自全校不同专业的15,16级同学参加了此次分享会. 分享会于20:00正 ...