[计数] QOJ7416 Grammarly

posted on 2025-10-14 12:46:15 | under | source

题意:给你一个字符串 \(s\),每次丢掉左边或右边一个字符,做任意次,将这个过程记下来得到一个字符串序列,求本质不同的序列个数。要求 \(O(n)\) 复杂度。

一开始以为是字符串科技题,实际上直接数数就行了。

注意到子串 \([1,n)\)\((1,n]\) 不同,当且仅当 \([1,n]\) 字符不全相同。那么在 \(s\) 变成全同串之前任意操作都不会相同,而变成全同串显然好算。

对于变成全同串是好做的,因为拎出所有连续段,考虑从非全同串变成全同串,其中一端必为连续段一端,这样总情况数是 \(O(n)\) 的。算方案就多重排列。

但你可以容斥,用 \(2^{|S|}-1\) 减去重复方案数,就没了。

posted @ 2026-01-12 20:14  Zwi  阅读(1)  评论(0)    收藏  举报