loading...

No Zero-Sum Subsegment

[QOJ5530] No Zero-Sum Subsegment

求序列个数,模 \(998244353\)

  • \(A\) 个元素等于 \(-2\)\(B\) 个等于 \(-1\)\(C\) 个等于 \(1\)\(D\) 个等于 \(2\)
  • 任意子区间的和不为 \(0\)

\(A,B,C,D \le 10^6\)。多测,\(T \le 10^5\)

NOIP2024 联考时考过,我一定没有好好补题。

UPD:怎么写过题解/ll。

考虑到任意子区间的和不为 \(0\) 可以刻画为前缀和序列 \(s\) 没有任何元素相同。进一步地,看做在数轴上的跳跃。因为每次跳跃的距离很小,考虑分类讨论。如果相邻的两个位置曾经跳过,划分了数轴跳到某一边后,那么后面无法再跳到另一边。

一个很容易感受到的特殊跳法:\(+2,+2,\dots,+2,\pm 1,-2,\dots,-2,-2\)

我们知道最后要跳到 \(S=-2A-B+C+2D\)。不妨设 \(S>0\),则刚刚那个跳法不可能在位于 \(S\) 的左侧发生,否则无法回来了,但是有可能在 \(S\) 的右侧一直跳跳跳。同理在原点,我也可以先往前跳,\(-2,-2,\dots,-2,\pm 1, +2, +2,\dots, +2\),跳回来。

注意在原点还有一种情况:就是不那么花里胡哨地跳过去再跳回来,直接往 \(S\) 跳。

而往 \(S\) 跳也有两种方法,一是 \(+2,-1, +2\),走 3 步;二是 \(+1\),走 \(1\) 步,容易发现总共会消耗 \(S-\mathrm{eps}\) 个元素。

我们分类讨论原点起跳和 \(S\) 点结束跳跃的 \(3 \times 3 = 9\) 种情况,得到 \(\mathrm{eps}\) 的值,顺带可以计算出往 \(S\) 跳的一二两种情况的分别次数,最后得到 \(\pm 2\) 的使用个数。然后这就是组合大芬,吃一吃就好了。(比 NOIP2025 sale 难吗?)

posted @ 2026-07-16 18:49  goldspade  阅读(4)  评论(0)    收藏  举报