Description

众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习。但是今天六花酱不想做数学题,于是他们开始打牌。
现在他们手上有m张不同的牌,牌有两种:普通牌和功能牌。功能牌一共有n张,每张功能牌都有一个属性值wi,保证Sigma(wi)=m,1<=i<=N现在勇太将这m张牌随机打乱(一共有m!种不同的顺序)。
一开始,六花先从牌堆顶端取一张牌。接着每回合六花可以选择手中的一张牌打出,如果这张牌是普通牌,那么什么都不会发生;如果这种牌是功能牌,那么六花需要从牌堆顶端再取wi张牌。
重复这个过程直到六花手中没有手牌或六花要摸牌的时候牌堆已经空了,如果是前者,则勇太胜利,否则六花胜利。
举例来说,如果牌堆是{3,0,2,0,0)(用0表示普通牌,其他数字表示wi),那么六花打牌的过程可以为:
1)取一张牌,手中的牌为{3}。
2)打出{3},再取三张牌,手中的牌为{0,2,0}。
3)打出这三张牌,还需要再取两张,取到第二张的时候牌堆中已没有牌,六花胜利。
而如果牌堆是{2,0,0,3,0},不难发现是勇太大胜利。现在,六花想要知道,这M!种顺序中,有多少种是能让自己取得胜利的呢。
当然这个问题对萌萌哒六花来说实在是太雉了,所以她来向你寻求帮助,你能帮帮她吗。

Input

第一行一个整数n。
第二行他个空格隔开的正整数wi。
通过输入你可以自己算出来m=Sigma(Wi),1<=i<=N
n≤40,1<wi≤10^5

Output

输出一个整数表示答案,答案可能很大,你只需要输出对998244353取模后的结果。

Sample Input

1
3

Sample Output

2
样例解释一
m!种牌堆中,{3,0,0),{0,3,0){0,0,3)各有两个,其中只有第一种满足条件。

Solution

六花真是太可爱了

答案是$\frac{m!}{m-n+1}$。

假设所有的数都减$1$,然后在序列末尾添上一个$-1$。也就是要保证所有的前缀和大于等于$0$。

把这个序列头尾相接成一个环,$m+1$个数圆排列的个数为$m!$。

画个图感性理解一下可以发现每个圆排列只有一种断法。

又因为我们一开始加了一个$-1$,而这个$-1$可能是$n-m+1$个$-1$里面的任意一个,所以要除掉。

Code

 #include<iostream>
#include<cstring>
#include<cstdio>
#define LL long long
#define MOD (998244353)
using namespace std; LL n,m,ans=; inline int read()
{
int x=,w=; char c=getchar();
while (c<'' || c>'') {if (c=='-') w=-; c=getchar();}
while (c>='' && c<='') x=x*+c-'', c=getchar();
return x*w;
} int main()
{
n=read();
for (int i=; i<=n; ++i) m+=read();
for (int i=; i<=m; ++i)
if (i!=m-n+) (ans*=i)%=MOD;
printf("%lld\n",ans);
}

BZOJ4735:你的生命已如风中残烛(组合数学)的更多相关文章

  1. BZOJ4735 你的生命已如风中残烛(组合数学)

    将每个位置上的数都-1,则显然相当于前缀和始终非负. 然后就是完全想不到的了.考虑往里面加一张-1的牌.假设在一个合法排列的最后添上一个-1,那么在该排列的所有循环同构排列中,满足前m个前缀和都非负的 ...

  2. BZOJ4735 你的生命已如风中残烛 【数学】

    题目链接 BZOJ4735 题解 给定一个序列,有的位置为\(w_i - 1\),有的位置为\(-1\),问有多少种排列,使得任意前缀和非负? 我们末尾加上一个\(-1\),就是要保证除了末尾外的前缀 ...

  3. [LOJ#2329]「清华集训 2017」我的生命已如风中残烛

    [LOJ#2329]「清华集训 2017」我的生命已如风中残烛 试题描述 九条可怜是一个贪玩的女孩子. 这天她在一堵墙钉了 \(n\) 个钉子,第 \(i\) 个钉子的坐标是 \((x_i,y_i)\ ...

  4. 2018.10.30 uoj#273. 【清华集训2016】你的生命已如风中残烛(组合数学)

    传送门 组合数学妙题. 我们把这mmm个数都减去111. 然后出牌的地方就变成了−1-1−1. 然后发现求出每个位置的前缀和之后全部都是非负数. 考虑在最后加入一个−1-1−1构成一个m+1m+1m+ ...

  5. uoj#273. 【清华集训2016】你的生命已如风中残烛(组合数学)

    传送门 一道打表题 我们把那些普通牌的位置看成\(-1\),那么就是要求有多少个排列满足前缀和大于等于\(1\) 考虑在最后放一个\(-1\),那么就是除了\(m+1\)的位置前缀和都要大于等于\(1 ...

  6. 洛谷 P6672 - [清华集训2016] 你的生命已如风中残烛(组合数学)

    洛谷题面传送门 题解里一堆密密麻麻的 Raney 引理--蒟蒻表示看不懂,因此决定写一篇题解提供一个像我这样的蒟蒻能理解的思路,或者说,理解方式. 首先我们考虑什么样的牌堆顺序符合条件.显然,在摸牌任 ...

  7. UOJ273 [清华集训2016] 你的生命已如风中残烛 【数学】

    题目分析: 把$0$卡牌看成$-1$.题目要求前缀和始终大于等于$1$. 最后添加一个$-1$,这样除了最后一位之外大于等于1,最后一位等于0. 构造圆排列.这样的话一个圆排列只有一个满足的情况,然后 ...

  8. 【UOJ】#273. 【清华集训2016】你的生命已如风中残烛

    题目链接:http://uoj.ac/problem/273 $${Ans=\frac{\prod _{i=1}^{m}i}{w-n+1}}$$ #include<iostream> #i ...

  9. uoj#344. 【清华集训2017】我的生命已如风中残烛(计算几何)

    题面 传送门 题解 orzxyx 首先我们发现,一个点如果被到达大于一次,那么这个点肯定在一个环上.所以在不考虑环的情况下每个点只会被到达一次,那么我们就可以直接暴力了 简单来说,我们对每个点\(i\ ...

随机推荐

  1. Windows 忘记登录密码解决方法 【摘抄于百度】

    一.简单的方法: 开机启动windows,进入欢迎界面后,会出现输入用户名密码提示框,这时候,同时按住Ctrl+Alt+Delete,会跳出一个账号窗口,输入用户名:administer,按回车即可. ...

  2. SQL Server T—SQL 存储过程 触发器

    一.存储过程 存储过程是一组编译在单个执行计划中的T-SQL语句 存储过程:就像函数一样的会保存在数据库中(可编程性) 存储过程的优点: 1.允许模块化程序设计 2.允许更快执行如果某操作需要大量T- ...

  3. MySQL数据库的配置

    一.配置MySQL数据库 MySQL的官网www.mysql.com 1.解压绿色版mysql,并改名为mysql5.7,如下图 对比一下下图5.6以前的版本,少data目录(存放数据)和my-def ...

  4. VMware12创建新的虚拟机及设置硬件环境

    一.安装VMware虚拟机 http://jingyan.baidu.com/article/215817f78879c21edb142379.html?qq-pf-to=pcqq.group 二.创 ...

  5. Mybatis标签bind用法

    Mybatis使用bind元素进行模糊查询,不用在乎数据库是mysql还是oracle从而提高可移植性 使用bind元素传递多个参数 public List<Student> findSt ...

  6. Mybatis之SessionFactory原理

    Mybatis在使用前需进行初始化,下面就针对Mybatis的初始化过程进行介绍.Mybatis的初始化过程有两种:基于XML和基于Java API两种方式,下面就针对基于XML的方式进行展开. 一. ...

  7. H5自适应屏幕分辨率大小

    说明: ①:H5自适应不同分辨率的设备,其实主要就一句 <meta name="viewport" content="width=device-width,init ...

  8. js 动态声明变量

    var  object = {}; for(var i=0; i<5; i++){ object['attr'+i] = i; }

  9. angularjs1.X获取前一天日期

    $scope.getDate = new Date(); //可以当前日期 $scope.nowDate = $filter("date")($scope.getDate, &qu ...

  10. 字节顺序标记BOM

    最近,从numbers导出的csv文件,导入excel后,出现中文乱码问题.网上查询后,发现是numbers导出的csv默认是utf-8无BOM的,使用sublimText3打开,另存为utf-8wi ...