AtCoder Regular Contest 102 (ARC102) E - Stop. Otherwise... 排列组合
原文链接https://www.cnblogs.com/zhouzhendong/p/ARD102E.html
题目传送门 - ARC102E
题意
有 $n$ 个取值为 $[1,k]$ 的骰子,对于每一个 $i(i\in [2,2k])$ ,输出满足“任意两个骰子的值的和不为 $i$ ”的情况总数。
$1\leq n,k\leq 2000$
题解
扯淡还是要先撤的。比赛的时候被 D 题续了好久, E 题差一句话就调出来了。如果赛后与 Functionendless 交流完 D 题,回来检查这题,然后检查了 2 分钟就发现了错误…… QAQ
首先考虑求解其中一个 $i$:
如果 $i$ 为 奇数 : 那么,显然,对于所有 $x(x\leq \frac{i-1}2)$ , $i-x\neq x$ ,且所有骰子的取值中只可能出现 $x$ 或者 $i-x$ ,当然也有可能两种都不出现,我们称这样的一对数为一对“互斥数对”。显然知道 $i$ 和 $k$ 之后,互斥数对的种数很容易知道,设为 $lim$ 。于是我们枚举一下选择几个互斥数对,假设我们选择了 $j$ 种互斥数对:那么,首先是在所有的互斥数对里选择 $j$ 个数对,方案数为 $\binom{lim}{j}$;然后,对于每一种出现的互斥数对,都可以选择其中一种数让他出现,故有 $2^j$ 种,这样子相当于已经至少选择了 $j$ 个数,故我们还要放 $n-j$ 个数字,我们有 $k-lim+j$ 种数字可供任意选择。于是问题被转化成了在 $k-lim+j$ 个带标号的位置放上非负整数,使得所有位置的数之和为 $n-j$ 的方案数。这个东西直接用 插板法 搞成组合数就可以了。
如果 $i$ 为 偶数 :那么显然出现了一种特殊情况: $2x=i$ ,于是 $x$ 这个数最多只能出现。于是我们直接分这个数字出现和不出现两种情况,问题就被转化成了两个 $i$ 为奇数时的问题了。详见代码。
通过预处理组合数和预处理 $2$ 的幂,我们可以在大约 $O(n^2+nk)$ 的时间复杂度内通过此题。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=4005,mod=998244353;
int n,k,C[N][N],pw2[N];
int c(int n,int m){
if (m>n||m<0)
return 0;
return C[n][m];
}
int calc(int m,int n){return c(n+m-1,m-1);}
int Get(int v,int n,int k){
int ans=0;
int lim=max(0,v/2-max(0,v-1-k));
for (int i=0;i<=lim;i++)
ans=(1LL*pw2[i]*C[lim][i]%mod*calc(k-lim*2+i,n-i)+ans)%mod;
return ans;
}
int main(){
pw2[0]=1;
for (int i=1;i<N;i++)
pw2[i]=pw2[i-1]*2%mod;
for (int i=0;i<N;i++)
C[i][0]=C[i][i]=1;
for (int i=1;i<N;i++)
for (int j=1;j<i;j++)
C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
scanf("%d%d",&k,&n);
for (int i=2;i<=2*k;i++)
if (i&1)
printf("%d\n",Get(i,n,k));
else
printf("%d\n",(Get(i-1,n,k-1)+Get(i-1,n-1,k-1))%mod);
return 0;
}
AtCoder Regular Contest 102 (ARC102) E - Stop. Otherwise... 排列组合的更多相关文章
- AtCoder Regular Contest 102 (ARC102) D All Your Paths are Different Lengths 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/ARC102D.html 题目传送门 - ARC102D 题意 给定 $L$,请你构造一个节点个数为 $n$ ,边 ...
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Regular Contest 102 E Stop. Otherwise...
题目链接:atcoder 大意:有\(n\)个骰子,每个骰子上面有\(k\)个数,分别是\(1\text ~ k\),现在求\(\forall i\in[2...2k]\),求出有多少种骰子点数的组合 ...
- AtCoder Regular Contest 102 D - All Your Paths are Different Lengths
D - All Your Paths are Different Lengths 思路: 二进制构造 首先找到最大的t,使得2^t <= l 然后我们就能构造一种方法使得正好存在 0 到 2^t ...
- 2018.09.02 Atcoder Regular Contest 102简要题解
比赛传送门 T1 Triangular Relationship 分析之后发现有两种情况: 1. n为奇数,那么所有数都是k的倍数. 2. n为偶数,那么所有数都是k/2的倍数. 然后就可以愉快A题了 ...
- AtCoder Regular Contest 061
AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...
- AtCoder Regular Contest 094 (ARC094) CDE题解
原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- AtCoder Regular Contest 093
AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...
随机推荐
- Android App增量升级
移动互联网主打的就是用户体验和产品的快速迭代,通过用户反馈和用户行为跟踪及时调整产品方向,这样才能持续保持生命力和创造力.说的接地气点就是,你频繁的升级更新,有时只是修复了几个bug或者微调了下界面, ...
- Winform按键捕获
参考:http://blog.csdn.net/zhensoft163/article/details/4239796 下载链接 方法1:使用窗体的 KeyDown 事件 private void F ...
- Spring initializr使用
Spring initializr 是Spring 官方提供的一个很好的工具,用来初始化一个Spring boot 的项目. 有两种方式可以使用Spring initializr来创建一个项目: ht ...
- Day8--------------yum软件包管理
1.url三段式:协议.域名.路径 例如:http://wan.360.cn/game 2.本地yum配置: vim /etc/yum.repos.d/local.repo [local] #固定格式 ...
- oracle里面用sql做报表并带小计合计常用到的函数
1-- DECODE函数是Oracle PL/SQL是功能强大的函数之一,假设我们想给职员加工资,其标准是:工资在8000元以下的将加20%:工资在8000元以上的加15%,通常的做法是,先选出记录 ...
- pip的常用命令
前言 pip作为Python的御用包管理工具有着强大的功能,但是许多命令需要我们使用的时候借助搜索引擎查找(尤其是我), 于是我想将我使用到的命令整合下来,以后不用麻烦去找了,也希望能给你带来帮助.文 ...
- 树·二叉查找树ADT(二叉搜索树/排序树)
1.定义 对于每个节点X,它的左子树中所有的项的值小于X的值,右子树所有项的值大于X的值. 如图:任意一个节点,都满足定义,其左子树的所有值小于它,右子树的所有值大于它. 2.平均深度 在大O模型中, ...
- js学习——函数
函数声明 function funName(parameter){} 函数表达式,并把函数存储在变量x中 //不用给函数名,后续并不能直接用给定的函数名调用 var x = function(a){r ...
- WebSocket异步通讯,实时返回数据相关问题论坛
https://stackoverflow.com/questions/23773407/a-websockets-receiveasync-method-does-not-await-the-ent ...
- 关闭VirtualBox虚拟机的时钟同步
原文链接:关闭VirtualBox虚拟机的时钟同步 在VirtualBox的虚拟机上默认虚拟机的时间是会和物理机同步的,但可以通过下面的命令来关闭 1. 首先查看虚拟机列表 VBoxManage li ...