#6924. CSP-J 2025 多边形(polygon)T4

CSP-J 2025 多边形(polygon)T4

多边形(polygon)

题目描述

小 R 喜欢玩小木棍。小 R 有 n 根小木棍,第 i(1 ≤ i ≤ n)根小木棍的长度为 aᵢ。

小 X 希望小 R 从这 n 根小木棍中选出若干根小木棍,将它们按任意顺序首尾相连,拼成一个多边形。

小 R 并不知道小木棍能拼成多边形的条件,于是小 X 直接将条件告诉了他:

对于长度分别为 l₁, l₂, …, lₘ 的 m 根小木棍,这 m 根小木棍能拼成一个多边形,当且仅当:

  • m ≥ 3;
  • 所有小木棍的长度之和大于所有小木棍的长度最大值的两倍。

即:

l₁ + l₂ + … + lₘ > 2 × max(l₁, l₂, …, lₘ)

由于小 R 知道了小木棍能拼成多边形的条件,小 X 提出了一个更难的问题:有多少种选择小木棍的方案,使得选出的小木棍能够拼成一个多边形?

你需要帮助小 R 求出选出的小木棍能够拼成一个多边形的方案数。

两种方案不同,当且仅当选择的小木棍的下标集合不同,即存在 1 ≤ i ≤ n,使得其中一种方案选择了第 i 根小木棍,但另一种方案未选择。

由于答案可能较大,你只需要求出答案对 998244353 取模后的结果。

输入格式

从文件 polygon.in 中读入数据。

输入的第一行包含一个正整数 n,表示小 R 的小木棍的数量。

输入的第二行包含 n 个正整数 a₁, a₂, …, aₙ,表示小 R 的小木棍的长度。

输出格式

输出到文件 polygon.out 中。

输出一行一个非负整数,表示小 R 选出的小木棍能够拼成一个多边形的方案数对 998244353 取模后的结果。

样例 1

输入

5
1 2 3 4 5

输出

9

解释

共有以下 9 种选择小木棍的方案,使得选出的小木棍能够拼成一个多边形:

方案编号 选择的小木棍下标 长度之和 长度最大值
1 2、3、4 2 + 3 + 4 = 9 4
2 2、4、5 2 + 4 + 5 = 11 5
3 3、4、5 3 + 4 + 5 = 12
4 1、2、3、4 1 + 2 + 3 + 4 = 10 4
5 1、2、3、5 1 + 2 + 3 + 5 = 11 5
6 1、2、4、5 1 + 2 + 4 + 5 = 12
7 1、3、4、5 1 + 3 + 4 + 5 = 13
8 2、3、4、5 2 + 3 + 4 + 5 = 14
9 1、2、3、4、5 1 + 2 + 3 + 4 + 5 = 15

样例 2

输入

5
2 2 3 8 10

输出

6

解释

共有以下 6 种选择小木棍的方案,使得选出的小木棍能够拼成一个多边形:

方案编号 选择的小木棍下标 长度之和 长度最大值
1 1、2、3 2 + 2 + 3 = 7 3
2 3、4、5 3 + 8 + 10 = 21 10
3 1、2、4、5 2 + 2 + 8 + 10 = 22
4 1、3、4、5 2 + 3 + 8 + 10 = 23
5 2、3、4、5
6 1、2、3、4、5 2 + 2 + 3 + 8 + 10 = 25

样例 3

见选手目录下的 polygon/polygon3.in 与 polygon/polygon3.ans。

该样例满足测试点 7~10 的约束条件。

样例 4

见选手目录下的 polygon/polygon4.in 与 polygon/polygon4.ans。

该样例满足测试点 11~14 的约束条件。

子任务

对于所有测试数据,保证:

  • 3 ≤ n ≤ 5000;
  • 对于所有 1 ≤ i ≤ n,均有 1 ≤ aᵢ ≤ 5000。
测试点编号 n ≤ 小木棍长度最大值 ≤
1~3 3 10
4~6 10
7~10 20
11~14 500
15~17 100
18~20 5000 1
21~25 5000