LINK:Placing Rooks

丢人现场.jpg

没看到题目中的条件 放n个rook 我以为可以无限放 自闭了好半天。

其实只用放n个。那么就容易很多了。

可以发现 不管怎么放 所有列/所有行 都必须得放有。

那么最多只有n-1个pairs 当k==0时 容易发现是一个n!.

总之还是迷了很久。一道比较锻炼我当前水平的计数题。

有k行空着 比较显然 因为一旦多加一对 那么两个棋子就会放在同一行。

考虑计算出方案数 容易发现一开始的方案数为 \(C(n,k)\cdot (n-k)^n\)必然会有不合法的情况。

因为此时的含义是 至少有k行空着的方案数。需要-掉k+1行空着-k+2行空着...的方案数。

我们显然无法直接求出恰好有k+1行空着的方案数。如果可以直接求出恰好k行空着的就行辣。

考虑容斥 值得一提的是这样容斥会出错容斥系数不对。

如果至少k+1行空着的方案数也不对因为刚才的方案数再乘上后面的乘积营造了多种局面下的k+1行空着甚至一些局面是重复的。

而直接减掉只能减掉一部分。

做法:在原来的情况下进行容斥 在选出k个空行的时候考虑此时多选出了一行空着的-多选出两行空着的+...

这样容斥的系数就对了。

const ll MAXN=200010;
ll n,k;
ll fac[MAXN],inv[MAXN];
inline ll C(ll a,ll b){if(a<b)return 0;return fac[a]*inv[b]%mod*inv[a-b]%mod;}
inline ll ksm(ll b,ll p)
{
ll cnt=1;
while(p)
{
if(p&1)cnt=cnt*b%mod;
b=b*b%mod;p=p>>1;
}
return cnt;
}
signed main()
{
freopen("1.in","r",stdin);
get(n);get(k);
if(k>=n){puts("0");return 0;}
fac[0]=1;
rep(1,n,i)fac[i]=fac[i-1]*i%mod;
inv[n]=ksm(fac[n],mod-2);
fep(n-1,0,i)inv[i]=inv[i+1]*(i+1)%mod;
if(!k)putl(fac[n]);
else
{
ll ans=0;
rep(k,n,i)
{
ans=(ans+(((k-i)&1)?-1:1)*C(n,k)*C(n-k,i-k)%mod*ksm(n-i,n))%mod;
}
putl((ans+mod)%mod*2%mod);
}
return 0;
}

CF EC 86 E Placing Rooks 组合数学的更多相关文章

  1. Solution -「CF 1342E」Placing Rooks

    \(\mathcal{Description}\)   Link.   在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...

  2. CF 1400G.Mercenaries 题解【SOSDP 组合数学】

    CF 1400G.Mercenaries 题意: 有\(n\)个佣兵,问雇佣至少一名雇佣兵且满足下述条件的方案数 如果雇佣第\(i\)个佣兵必须要求最终雇佣的总人数\(x\)满足\(l_i\le x\ ...

  3. 【CF】86 B. Petr#

    误以为是求满足条件的substring总数(解法是KMP分别以Sbeg和Send作为模式串求解满足条件的position,然后O(n^2)或者O(nlgn)求解).后来发现是求set(all vali ...

  4. CF EC 87 div2 1354 C2 Not So Simple Polygon Embedding 计算几何 结论

    LINK:Not So Simple Polygon Embedding 搞了好久终于搞会了. 错误原因 没找到合适算边长的方法 要么就是边长算的时候算错了. 几何学的太差了 最后虽然把十边形的和六边 ...

  5. FF D8 FF FE 00 24 47 00转图片

    String[] img = "FF D8 FF FE 00 24 47 00 9D 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F0 0 ...

  6. Linux CA证书与https讲解

    1.什么是CA证书. ◇ 普通的介绍信 想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?常用的办法是带公司开的一张介绍信,在 ...

  7. 数字麦克风PDM信号采集与STM32 I2S接口应用(三)

    本文是数字麦克风笔记文章的数据处理篇. 读取数字麦克风的信号,需要嵌入式驱动和PC应用的结合,驱动负责信号采集,应用代码负责声音分析. 一般而言,在完成特征分析和实验之后,把优化过的代码固化到嵌入式端 ...

  8. Corrupt JPEG data: 1 extraneous bytes before marker 0xd9 JPEG datastream contains no image

    Corrupt JPEG data: 1 extraneous bytes before marker 0xd9 JPEG datastream contains no image 对比发送时的全部数 ...

  9. jpeg相关知识

    一.jpeg介绍 JPEG 是 Joint Photographic Exports Group 的英文缩写,中文称之为联合图像专家小组.该小组隶属于 ISO 国际标准化组织,主要负责定制静态数字图像 ...

随机推荐

  1. # Mysql常用函数总结(一)

    Mysql常用函数总结(一) 博客已搬家,更多内容查看https://liangyongrui.github.io/ 遇到什么总结什么 DATE_SUB(date,INTERVAL expr type ...

  2. Makeflie学习笔记

    makefile基本格式 TARGER... : DEPENDEDS... COMMAND ... ... TARGET:规则定义的目标.生成的目标文件的文件名或者是一个动作 DEPENDEDS:执行 ...

  3. for of

    1. 遍历范围 for...of 循环可以使用的范围包括: 数组 Set Map 类数组对象,如 arguments 对象.DOM NodeList 对象 Generator 对象 字符串 2. 优势 ...

  4. scala 数据结构(十一):流 Stream、视图 View、线程安全的集合、并行集合

    1 流 Stream stream是一个集合.这个集合,可以用于存放无穷多个元素,但是这无穷个元素并不会一次性生产出来,而是需要用到多大的区间,就会动态的生产,末尾元素遵循lazy规则(即:要使用结果 ...

  5. Unity - NavMeshAgent-GetStart

    Select scene geometry that should affect the navigation – walkable surfaces and obstacles. Check Nav ...

  6. Unity安卓共享纹理

    前置知识:安卓集成Unity开发示例 本文的目的是实现以下的流程: Android/iOS native app 操作摄像头 -> 获取视频流数据 -> 人脸检测或美颜 -> 传输给 ...

  7. Azure Web App (三)切换你的Net Core Web 项目的数据库连接字符串

    一,引言 上一篇文章讲到今天我们演示了一下,如何在Web App中创建 “Deployment Slot”进行快速无停机部署新功能代码,也使用VS进行发布到创建的Web App中创建的新的部署槽位中, ...

  8. 那些非cmake生成的VTK工程存在的让人崩溃的坑

    由于cmake和IDE的一些编译选项不同,所以导致我们使用者需要多做一些事情.而且vtk官方也表示: If you are not using CMake to compile your code, ...

  9. dva + umi 学习笔记

    首先,这里的 dva + umi 不是说学习dva和umi,而是基于 dva + umi 的react前端开发脚手架,这是我的目标. 一开始,我在dva文档的例子里看到了 dva + umi 的例子. ...

  10. 学习jvm(一)--java内存区域

    前言 通过学习深入理解java虚拟机的教程,以及自己在网上的查询的资料,做一个对jvm学习过程中的小总结. 本文章内容首先讲解java的内存分布区域,之后讲内存的分配原则以及内存的监控工具.再下来会着 ...