想模一大堆人呢。考场上AC的大仙。

估计没人想给这题好好写一个题解吧,因为它的确挺简单的。。。

但是它对我来说一点都不简单啊!!!

至少出题人用脚写题解的时候肯定认为这道题是送分题了

容斥,枚举至少有 i 个不满足条件,方案数为C(n,i)*C(m-i*k-1,n-1)。

对着题解发了半个小时的呆。我真的就是不会啊我有什么办法。

为啥就不重不漏了啊?为啥就最少了啊?为啥就容斥了啊?为啥我抄了这个式子才30分啊?

我估计没多少人会看这一篇所以废话有点多。

其实容斥原理不难想到,考场上我就想到了。

但是我的思路清奇了一波,我在想通过容斥计算出“恰好有i个城市不满足条件的方案数”

一共要求出n个,每次复杂度是n,总复杂度n2

然后就滚去打暴力了。

然而为什么要把每一个都求出来啊!它们之间跟没就没有递推的依赖啊。

所以说就是脑子不行。

所以问题其实只是求解我刚才那个问题在i=0时的值,求解一次就好。

考场上想不到就算了,诚当是攒exp了。

那么考虑如何求解。

问题中的“恰好”让人感到有些拘束,那么就别恰好了,至少0个好吧?

那就水极了,相当与没有上界限制,问题就是m物分n人,每人至少1。

挡板法的裸题。是 $ C^{n-1}_{m-1} $ 啦。这个还是比较简单的。

至少0个的处理完了,那么至少1个的呢?

首先在所有城市里选出1个, $ C^1_n $ 。

然后是在剩下空余的建设队里,选择k个先分给你选定的那个城市,剩下的m-k个分给所有的这n个城市。

还是挡板法: $ C^{n-1}_{m-k-1} $

注意,你选定的那个城市也要继续参与分配,至少再被分到1个,否则它就是恰好k个而并非超过k个了。

至少2个呢?算的过程和含义都一样: $ C^2_n × C^{n-1}_{m-k*2-1} $

至少i个呢?$ C^i_n × C^{n-1}_{m-k*i-1} $

至此我们终于得到了题解里面的式子。(我早就在半道上迷路了)

接下来就可以容斥了。剩下的就是一个容斥的裸题了。

然而我连容斥奇加偶减都不会了。。。

对于至少有1的情况中,里面会包括至少有2的情况。。。

啊。。。然后用二项式定理证它就是个容斥了嘛(其实是我不会了)

 #include<bits/stdc++.h>
using namespace std;
#define mod 998244353
#define int long long
int inv[],fac[],invv[],n,m,k;
signed main(){
scanf("%lld%lld%lld",&n,&m,&k);
if(n>m){puts("");return ;}
if(n==m){puts("");return ;}
// if(m>n*k){puts("0");return 0;}
inv[]=inv[]=fac[]=fac[]=invv[]=;
for(int i=;i<=m;++i)invv[i]=-mod/i*invv[mod%i]%mod,inv[i]=inv[i-]*invv[i]%mod,fac[i]=fac[i-]*i%mod;
int ans=fac[m-]*inv[n-]%mod*inv[m-n]%mod;
for(int i=;i<=n&&i*k+n<=m;++i)ans=(ans+((i&)?-:)*fac[n]*inv[i]%mod*inv[n-i]%mod*fac[m-i*k-]%mod*inv[n-]%mod*inv[m-i*k-n]%mod)%mod;
printf("%lld\n",(ans%mod+mod)%mod);
}

贴代码就跑

建设城市(city):组合数,容斥原理的更多相关文章

  1. 8.9 NOIP模拟测试15 建设城市(city)+轰炸行动(bomb)+石头剪刀布(rps)

    鉴于T3的惨烈程度,我决定先来颓篇题解. T1 建设城市(city) 挡板法+容斥 m个建设队分成n组,每组必须有一个,先不考虑上限,共有 C(m-1,n-1)种方案. 有i个组是超过k个的,容斥掉 ...

  2. 嵊州D6T2 城市 city

    城市 city [问题描述] 众所周知,why 是czyz 王国的国王. czyz 王国一共有n 个城市,每个城市都有一条道路连向一个城市(可能连向这个城市自己). 同时,对于每一个城市,也只有一条道 ...

  3. [CSP-S模拟测试]:建设城市(city)(组合数学+容斥)

    题目传送门(内部题8) 输入格式 一行三个整数$n,m,k$. 输出格式 一行一个整数表示答案.对$998244353$取模. 样例 样例输入 3 7 3 样例输出 数据范围与提示 对于10%的数据, ...

  4. 【模拟8.09】建设城市(city) (容斥)

    放在了考试T1 发现70分的DP很水啊,f[i][j]为当前位置是i分配了j个队的方案 我们用前缀和统计,在将i删去,j倒序枚举,就可以删掉一维(也可以滚动数组滚起来) 1 #include<i ...

  5. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  6. 组合数+容斥原理 UVALive 7040 Color(14西安F)

    题目传送门 题意:n盆花涂色,相邻不能涂相同的颜色,从m中颜色选取k种颜色涂,保证正好有k种颜色 分析:从m中颜色选取k种就是C (m, k),然后第一个有k种选择,之后的都有k-1种选择,这样是不超 ...

  7. [NOIP模拟15]题解

    A.建设城市(city) 这容斥题多难啊你们是怎么考场切掉的啊 首先可以想一下,如果没有k的限制,这题怎么做? 相信你们肯定能看出来是挡板法裸题:m个物品分给n个人,每个人至少一个. 就是$C_{m- ...

  8. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

  9. 微信小程序实现按首字母检索城市列表

    不说废话,上效果图 因为我有多处要用到,所以我这里是写成自定义组件的,你也可以直接改成在page页面编写: 布局左边一个scroll-view,显示城市列表,右边一个view显示字母列表,城市列表这边 ...

随机推荐

  1. Java 学习笔记之 Stop停止线程

    Stop停止线程: 使用stop()方法停止线程是非常暴力的,会抛出java.lang.ThreadDeath Error,但是我们无需显示捕捉, 以下捕捉只是为了看得更清晰. public clas ...

  2. .NET Core 3.0之深入源码理解ObjectPool(一)

    写在前面 对象池是一种比较常用的提高系统性能的软件设计模式,它维护了一系列相关对象列表的容器对象,这些对象可以随时重复使用,对象池节省了频繁创建对象的开销. 它使用取用/归还的操作模式,并重复执行这些 ...

  3. RAID5 配置,3块磁盘,2快备份

    1. 在虚拟机中再添加5块硬盘: 2. 用fdisk -l 可以查看当前虚拟机磁盘情况. 3. 使用mdadm命令创建RAID5,名称为”/dev/md0″. -C代表创建操作,-v显示创建过程,-n ...

  4. java猜数游戏

    java随机数的产生 int number=(int)(Math.random()*10+1) Math.random()*n //n个随机数,从0开始 do{}while循环 //猜数,1到10的随 ...

  5. top命令之性能分析

    top命令详解 当前时间20:27:12 当前系统运行时间3:18秒    1个用户   系统负载平均长度为0.00,0.00,0.00(分别为1分钟.5分钟.15分钟前到现在的平均值) 第二行为进程 ...

  6. 利用 js 的一些函数调用,排序

    编辑器:Sublime Text 3 1.冒泡排序 let arr = new Array(5,9,3,6,7,8,4,2,);bubbleSort(arr);console.log(arr);fun ...

  7. 域渗透基础之NTLM认证协议

    域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...

  8. 网站开发常用Sql语句

    维护网站,经常操作数据库,使用sql语句可以达到事半功倍的效果.比如,把所有密码为空的教师初始设成id一致,sql语句比手动快万倍. 下面介绍数据库开发中经常用到的一些sql语句: 一 建库操作 1. ...

  9. Vue学习笔记和代码记录

    ## 安装 * 直接引入链接:建议初学者使用:* 通过node.js的NPM安装Vue:* 通过node.js的NPM安装Vue-cli脚手架(推荐安装方式): ## 基础 ### 数据类型 * 字符 ...

  10. RIDE的Edit界面

    有四种类型的Edit界面(注:测试套件主要是存放测试案例,资源文件主要是存放用户关键字) 1.测试套件(file类型)的Edit界面 首先展开Setting: 对右侧红框按钮简单说明: Library ...