• 洛谷P6672 你的生命已如风中残烛


    传送门

    题目描述

    期中考试考完了,已经感到没有什么好害怕的六花今天决定不学数学了,于是和勇太打起了游戏王。

    “你已空手空场,生命只剩一百,事到如今你还能做什么?”

    “所累哇多卡纳!”

    “纳尼?”

    然而六花的卡组实在是太菜了,经过分析,六花发现在一回合内,她卡组中的牌并没有办法达成 OTK,除非主角光环附体:

    被封印的艾克佐迪亚

    ——包括这张卡在内,「被封印者的右足」「被封印者的左足」「被封印者的右腕」「被封印者的左腕」全在手牌的时候,获得决斗胜利。

    在这里插入图片描述

    但是因为六花不是高贵的氪金玩家,她可以肯定,这五张牌中肯定有一张,在牌堆的底端。所以六花现在面临着一个难题:需要在一回合内将卡组抽完。

    六花的牌堆一共有 m+1m+1 张牌,因为最后一张牌是固定的,所以我们现在只考虑前 mm 张牌。

    在这 mm 张牌中,有 nn 张特殊牌和 m-nm−n 张普通牌,每一个特殊牌有一个属性值 w_iw
    i

    ,表示在打出这张牌后,可以再摸 w_iw
    i

    张牌。幸运的是,六花发现这些牌刚好满足 ∑\limits_{i=1}^nw_i=m
    i=1

    n

    w
    i

    =m,因此她可以放心的随意摸牌而不用担心爆牌。

    因为这 mm 张牌是被打乱的,所以总共有 m!m! 种不同的可能的牌堆。

    现在这回合开始了,六花先从牌堆里抽出一张牌,接着六花不断的打出手中的牌,如果打出特殊牌,则又可以摸牌,直到摸到最后一张牌达成胜利条件或者打光自己的手牌结束自己的回合继而输掉比赛。

    举例来说,如果牌堆是 {4,0,0,2,0,0,0}{4,0,0,2,0,0,0}(用 00 表示普通牌,其他数字表示 wi,其中最后一个 00 是最后一个部件),那么六花打牌的过程可以为:

    取一张牌,手中的牌为 {4}{4}。
    打出 {4}{4},再取四张牌,手中的牌为 {0,0,2,0}{0,0,2,0}。
    打出 {2}{2},还需要再取两张,这时已摸到最后一个部件,六花胜利。
    而如果牌堆是 {2,0,0,4,0,0,0}{2,0,0,4,0,0,0},不难发现是勇太的胜利。
    现在,六花想要知道这 m!m! 种不同的牌堆中,有多少种能够让她胜利。

    输入格式

    第一行一个整数 nn。

    第二行 nn 个空格隔开的正整数 w_iw
    i

    通过输入你可以自己算出来 m=∑w_im=∑w
    i

    输出格式

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

    输入输出样例

    输入 #1复制
    1
    5
    输出 #1复制
    24
    输入 #2复制
    6
    1 2 3 4 5 6
    输出 #2复制
    90337303
    说明/提示
    样例 11 解释
    所有可能的 m!m! 种牌堆中,只有形如 {5,0,0,0,0,0}{5,0,0,0,0,0} 的 2424 个牌堆满足条件。

    数据范围

    对于 10%10% 的数据,m \leq 10m≤10。

    对于 30%30% 的数据,n \leq 8n≤8。

    对于 50%50% 的数据,n \leq 15n≤15。

    对于 70%70% 的数据,n \leq 30n≤30。

    对于 100%100% 的数据,n \leq 40n≤40,1 \leq w_i \leq 10^51≤w
    i

    ≤10
    5
    。同时保证有 m-n \geq 4m−n≥4,因为牌堆里毕竟要有这 55 个部件嘛。

    上代码:

    #include
    using namespace std;
    int main(){
    	int n,m=0;
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    	{
    		int a;
    		scanf("%d",&a);
    		m+=a;
    	}
    	long long ans=1;
    	for(long long i=1;i<=m;++i)
    	{
    		if(m-n+1==i)	continue;
    		ans*=i;
    		ans%=998244353;
    	}
    	printf("%lld",ans);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    vue(十四)——vue3新特性之组合式api(二)
    Redis单线程源码深入解析
    Mysql-CRUD(增删查改)
    统信UOS或者麒麟KYLINOS上无交互安装deb包
    蓝桥杯的一些技巧
    制作一个简单HTML静态网页(HTML+CSS)
    React基础
    Docker 镜像上传到私有云和阿里云的超详细图文步骤
    码住!双11支付宝小程序云云市集,享骨折优惠最强购物清单,抽奖赢iPhone 15 Pro!
    C语言之数学运算强化练习题
  • 原文地址:https://blog.csdn.net/lzx_xzl_______/article/details/126497378