AtCoder Regular Contest 102 E Stop. Otherwise...
题目链接:atcoder
大意:有\(n\)个骰子,每个骰子上面有\(k\)个数,分别是\(1\text ~ k\),现在求\(\forall i\in[2...2k]\),求出有多少种骰子点数的组合方式使得任意两个骰子的点数之和不等于\(i\),注意不考虑顺序
分析
对每个\(i\)计算答案
我们知道,如果\(1\leq j \leq i\)且\(1\leq i-j \leq i\)那么\(j\)和\(i-j\)最多只能出现一个
我们对于每个\(i\)计算出有多少组\((j,i-j)\)满足上面的限制条件,记为\(cnt\)
那么对于剩下的\(k-2*cnt\)的取值便变得可以出现也可以不出现了
所以骰子点数的出现情况的方案数就是
\]
接下来考虑对于每一种出现情况的组合数
假设我们当前选了\(q\)个限制组中的元素,我们可以列出下面这样一个方程
\]
其中\(x1,x2,\cdots,x_q\)表示限制组中元素的出现次数,\(y_1,y_2,\cdots,y_{k-2*cnt}\)表示非限制组中的元素的出现次数
那么依照上面的假设就有\(x_i> 0,y_i\geq 0\),求该方程的解的组数
将方程转化为
\]
那么原问题就变成了一个经典的求方程正整数解的问题了,答案为\(C_{n+k-2*cnt-1}^{k-cnt-1}\)
将两者乘起来即可
注意当\(i\)是偶数的时候,会出现\((i/2,i/2)\)这样的一组无意义的限制组,我们可以强制令其取或不取(取最多也只有1个),然后和上面一样的求解
时间复杂度\(O(n^2)\)
#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<vector>
#include<queue>
#include<map>
using namespace std;
const int maxd=998244353,N=100000;
const double pi=acos(-1.0);
typedef long long ll;
int n,k,c[4010][4010],bin[4010];
int read()
{
int x=0,f=1;char ch=getchar();
while ((ch<'0') || (ch>'9')) {if (ch=='-') f=-1;ch=getchar();}
while ((ch>='0') && (ch<='9')) {x=x*10+(ch-'0');ch=getchar();}
return x*f;
}
void init()
{
k=read();n=read();
int i,j;
c[0][0]=1;
for (i=1;i<=4000;i++)
{
c[i][0]=1;
for (j=1;j<=i;j++)
c[i][j]=((ll)c[i-1][j]+c[i-1][j-1])%maxd;
}
bin[0]=1;
for (i=1;i<=4000;i++) bin[i]=(bin[i-1]*2)%maxd;
//for (i=1;i<=6;i++) cout << bin[i] << " ";cout << endl;
}
ll calc(int x,int y,int z)
{
if (y<0) return 0;
//cout << x << " " << y << " " << z << endl;
int i;ll ans=0;
for (i=0;i<=x&&i<=z;i++)
{
if (((i+y-1)>=0) && ((i+y-1)<=(z+y-1)))
{
//cout << i << " " << x << " " << y << " " << z << endl;
ans=(ans+((1ll*c[x][i]*bin[i])%maxd*c[z+y-1][i+y-1])%maxd)%maxd;
}
}
return ans;
}
void work()
{
int i,j;
for (i=2;i<=k*2;i++)
{
ll ans=0;int cnt=0;
for (j=1;j<=k;j++)
{
int tmp=i-j;
if ((tmp<=k) && (tmp>=1)) cnt++;
}
//cout << i << " " << cnt << endl;
if (i&1)
ans=calc(cnt/2,k-cnt,n);
else
ans=(calc((cnt-1)/2,k-cnt,n)+calc((cnt-1)/2,k-cnt,n-1))%maxd;
printf("%lld\n",ans);
}
}
int main()
{
init();
work();
return 0;
}
AtCoder Regular Contest 102 E Stop. Otherwise...的更多相关文章
- AtCoder Regular Contest 102
AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...
- AtCoder Regular Contest 102 (ARC102) E - Stop. Otherwise... 排列组合
原文链接https://www.cnblogs.com/zhouzhendong/p/ARD102E.html 题目传送门 - ARC102E 题意 有 $n$ 个取值为 $[1,k]$ 的骰子,对于 ...
- 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 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 ...
随机推荐
- 简单的词法设计——DFA模拟程序
实验一.简单的词法设计--DFA模拟程序 一.实验目的 通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的综合应用能力,并通过实践达到对所学的知识进行验证.通过对 DFA 模 ...
- 在线流媒体nginx/Windows解决方案
1,下载安装nginx这里是1.15.10,修改默认端口,看到测试页即可 2,conf文件中加入flv支持 location ~ .flv { flv; } 3,把mp4文件转码,使用ffmpeg-2 ...
- 2017湘潭大学邀请赛E题(贪心)
链接:https://www.icpc.camp/contests/4mYguiUR8k0GKE Partial Sum Input The input contains zero or more t ...
- python_超级基础
初识计算机 CPU 计算机的大脑.中央处理单元,主要负责数据运算及计算,是运算计算中心. 存储器 内存 临时存储数据,供CPU运算使用. 优点: 读取速度快. 缺点: 容量小,成本高,断电即消失. 硬 ...
- semantic-ui 标题
在semantic-ui中定义了5中标题样式,注意HTML中有h1-h6,而semantic-ui中只有h1-h5. 不过需要注意的是,semantic-ui的标题仍旧使用h1-h5来表示,但是在cl ...
- 01-学习vue前的准备工作
起步 1.扎实的HTML/CSS/Javascript基本功,这是前置条件. 2.不要用任何的构建项目工具,只用最简单的<script>,把教程里的例子模仿一遍,理解用法.不推荐上来就直接 ...
- ios点击输入框,界面放大解决方案
当我们编写的input宽度没有占满屏幕宽度,而且又没有申明meta,就会出现点击输入框,界面放大这个问题. 下面我直接给出解决方案: <meta name="viewport" ...
- Day 4-4 shutil模块
常用方法: import shutil f = open("conf.ini", "r") f1 = open("shutil.ini", ...
- innerText兼容问题处理
IE.Safari.Opera和Chrome支持innerText属性.低版本的火狐浏览器不支持,但支持作用类似的textContent属性.textContent是DOM3级规定的一个属性,而且也得 ...
- falsk 项目中日志设置
app/__init__.py: 1 import logging from logging.handlers import RotatingFileHandler ''' 开发中使用DEBUG级别, ...