luogu#P15998. [ICPC 2020 NAC] All Kill

[ICPC 2020 NAC] All Kill

题目描述

你刚刚和你的朋友参加完一场编程竞赛。不幸的是,你们未能 AK(即解决所有问题),但现在你想知道是否可能存在某种策略,使得你们能够解决所有问题。

解决一道问题分为两个阶段:思考阶段和编码阶段。你的朋友负责所有思考,而你负责所有编码。

对于每道问题,你已精确计算出自己编码所需的时间。然而,在比赛中编码一道问题之前,你的朋友需要先想出其解法。你无法估计朋友想法的产生时间,因此你采用如下模型:对于每道问题,你的朋友在比赛期间的某个随机分钟产生解题思路,且每个问题对应的这一时刻是独立的均匀随机变量。你一次只能编码一道题,因此任何时刻可能有多个问题在排队。你总是优先编码编号较小的问题。这个过程是按分钟执行的,因此如果在完成编码编号较大的问题之前,朋友想出了编号较小的问题的解法,你就会切换去编码编号较小的问题,但你并不希望这样。上下文切换是一种开销很大的操作,即使是在人脑中!

比赛策略可按如下方式按分钟建模:

  • 对于每个尚未有思路的问题,你的朋友在每一分钟有 1/(比赛剩余分钟数)1/(\text{比赛剩余分钟数}) 的概率想出解法。你的朋友可能在同 1 分钟内想出多个问题的解法。
  • 在那些仍需编码且朋友已想出解法的题目中,你会选择编号最小的一个,并花下一分钟对其进行编码(如果没有符合条件的题目,则此步骤什么也不做)。

你想要计算以下两个事件同时发生的概率:

  • 你们的队伍在比赛结束时完成了所有问题的编码;
  • 对于每个问题,其编码时间构成一个连续的区间。

记该概率为 ppnn 为比赛中的题目数量,tt 为比赛的总分钟数。可以证明 ptnp \cdot t^n 是一个整数。输出 (ptn)mod998,244,353(p \cdot t^n) \bmod 998,244,353。注意 998,244,353998,244,353 是一个大素数。

输入格式

输入的第一行包含两个空格分隔的整数 nn1n1051 \le n \le 10^5)和 tt1t1081 \le t \le 10^8),分别表示比赛中的题目数量和比赛的总分钟数。

接下来的 nn 行,每行包含一个整数 xx1x1031 \le x \le 10^3),按顺序给出每道题的编码时间(以分钟为单位)。保证这些时间的总和不超过 tt

输出格式

输出一个整数,即 (ptn)mod998,244,353(p \cdot t^n) \bmod 998,244,353,其中 pp 是上述两个事件同时发生的概率。

3 5
1
2
1
60
5 5
1
1
1
1
1
1296

提示

翻译由 DeepSeek V3.2 完成