题面传送门

数论小杂烩(


由题意,对于每个士兵 \(i\),要么选,对答案产生 \(a_i(\frac{x}{i-x})\) 倍的贡献,要么不选,对答案产生 \(1\) 倍的贡献。

由此可知每个士兵之间是独立的,不相互影响,则根据乘法原理,答案应为

\[\prod_{i=1}^{nk-1}(a_i+1)
\]

。大力展开,即

\[\prod_{i=0}^{n-1}\prod_{j=0,ik+j\neq0}^{k-1}(\frac{i}{ik+j-i}+1)
\]

,即

\[\prod_{i=0}^{n-1}\prod_{j=0,ik+j\neq0}^{k-1}(\frac{ik+j}{ik+j-i})
\]

。不妨将分子分母拆开来看:

  • 分子:

    \[\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)!
    \]

综上,可知答案为:

\[\dfrac{(nk-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\)。

则答案为

\[(p-1)!^{\left\lfloor \frac{v}{p}\right\rfloor}\times (v\bmod p)!\times \left(\left\lfloor\frac{v}{p}\right\rfloor\right)!
\]

,预处理 \(1\sim p-1\) 的阶乘,用递归 + 快速幂即可做到 \(\mathcal O(\log v)\) 计算。

根据威尔逊定理 \((p-1)!\equiv -1\ (\bmod\ p),p\in \rm{prime}\),原答案可化简为

\[(-1)^{\left\lfloor \frac{v}{p}\right\rfloor}\times (v\bmod p)!\times \left(\left\lfloor\frac{v}{p}\right\rfloor\right)!
\]

,这样可以做到 \(\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=\left\lfloor \dfrac{nk-1}{p}\right\rfloor+\left\lfloor \dfrac{nk-1}{p^2}\right\rfloor-\left(\left\lfloor \dfrac{nk-k}{p}\right\rfloor+\left\lfloor \dfrac{nk-k}{p^2}\right\rfloor\right)-\left\lfloor \dfrac{n}{p}\right\rfloor
\]

,可以证明 \(c\geq 0\)。

那么,当 \(c>0\) 时,\(ans\equiv 0\ (\bmod\ p)\),输出 \(0\) 即可,否则计算上文推出的答案:

\[\dfrac{(nk-1)!}{(nk-k)!\times (k-1)^{n-1}\times (n-1)!}
\]

。计算快速幂时根据费马小定理将质数 \(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 派遣的更多相关文章

  1. 洛谷 P5509 派遣

    题目传送门 心路历程: 每想到一种思路,就有一种要做出来的感觉.但一接着想就会发现这种方法有一些极小的问题,但是我没法解决... 于是就再换思路... 最后在请教了出题人神仙zcq之后,终于做出来了 ...

  2. 【BZOJ-2809】dispatching派遣 Splay + 启发式合并

    2809: [Apio2012]dispatching Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2334  Solved: 1192[Submi ...

  3. APIO2012派遣

    2809: [Apio2012]dispatching Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1196  Solved: 586[Submit ...

  4. 派遣例程与IRP结构

    提到派遣例程,必须理解IRP(I/O Request Package),即"输入/输出请求包"这个重要数据结构的概念.Ring3通过DeviceIoControl等函数向驱动发出I ...

  5. 数据结构,可并堆(左偏树):COGS [APIO2012] 派遣

    796. [APIO2012] 派遣 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿.  在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且 ...

  6. IRP派遣操作

    IRPTrace工具跟踪IRP 派遣函数(Dispathc Funtion)是windows驱动中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式 ...

  7. IRP 与 派遣函数

    什么是派遣函数: 派遣函数是 WIndows 驱动程序中的重要概念.驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.也就是说,派遣函数是用来处理驱动程序提交过来的 I ...

  8. 《Windows驱动开发技术详解》之派遣函数

    驱动程序的主要功能是负责处理I/O请求,其中大部分I/O请求是在派遣函数中处理的.用户模式下所有对驱动程序的I/O请求,全部由操作系统转化为一个叫做IRP的数据结构,不同的IRP数据会被“派遣”到不同 ...

  9. [APIO 2012]派遣

    Description 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且仅有一个上级.为 ...

随机推荐

  1. 想要彻底搞懂大厂是如何实现Redis高可用的?看这篇文章就够了!(1.2W字,建议收藏)

    高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...

  2. Egg.js学习与实战系列 · Post请求`csrf token`问题

    在使用axios请求egg.js封装的post接口时出现missing csrf token 或 invalid csrf token.踩过坑的新手估计不在少数,本篇记录一下解决方法. 问题原因 引用 ...

  3. Java:AQS 小记-1(概述)

    Java:AQS 小记-1(概述) 概述 全称是 Abstract Queued Synchronizer(抽象队列同步器),是阻塞式锁和相关的同步器工具的框架,这个类在 java.util.conc ...

  4. undefined reference to `recvIpcMsg(int, ipc_msg*)'——#ifdef __cplusplus extern "C" { #endif

    最近在弄一个进程间通信,原始测试demon用c语言写的,经过测试ok,然后把接口封装起来了一个send,一个recv. 使用的时候send端是在一个c语言写的http服务端使用,编译ok没有报错,但是 ...

  5. 一从二主IIC连接调试

    最近有个项目需要实现快速开机出摄像头预览(2s内),但是我的板子linux上的qt应用起来都要10s左右了,于是在硬件上增加了一个屏驱芯片TW8836,这是一个mcu,可以直接获取摄像头数据送到lcd ...

  6. 构建乘积数组 牛客网 剑指Offer

    构建成绩数组 牛客网 剑指Offer 题目描述 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...*A[i-1]A[i ...

  7. 矩形覆盖 牛客网 剑指Offer

    矩形覆盖 牛客网 剑指Offer 题目描述 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形.请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution: ...

  8. gas-station leetcode C++

    There are N gas stations along a circular route, where the amount of gas at station i isgas[i]. You ...

  9. 关于dns服务工作的原理,和配置的细节理解。

    dns服务器相关 1,dns原理,也就是迭代,和递归查询.将域名解析为ip的过程. 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Loc ...

  10. 西邮Linux兴趣小组第一次技术分享会

    2016年10月30日晚,西邮Linux兴趣小组技术分享会在西安邮电大学长安校区东区逸夫教学楼FF305室成功举办.200多名来自全校不同专业的15,16级同学参加了此次分享会. 分享会于20:00正 ...