首页 > 其他分享 >abc214 F - Substrings

abc214 F - Substrings

时间:2023-01-24 10:33:19浏览次数:56  
标签:26 limits abc214 int sum Substrings las

题意:

求给定字符串 \(s\) 的不同非空子序列个数

要求被选入的位置两两不相邻

\(n\le 2e5\)

思路:

如果没有不相邻的要求怎么做?

\(f_i\) 表示考虑 \(s[1..i]\),并且选 \(i\) 位置的答案

\(f_i=\sum\limits_{j<i}f_j\) 显然会重复计数,怎么办?

只需要从每个字符的最后出现位置转移:\(f_i=\sum\limits_{c='a'}^{'z'} f_{las(c)}\),其中 \(las(c)\) 为字符 \(c\) 的最后出现位置

这是因为,若 \(i<j,s_i=s_j\),那么 \(f_j\) 表示的方案集包含 \(f_i\) 表示的方案集!

复杂度 \(O(26n)\),\(26\) 为字符集大小。可以通过神秘的前缀和技术优化到 \(O(n)\)

要求不相邻的话,只需改成 \(f_{i+1}=\sum\limits_{c='a'}^{'z'} f_{las(c)}\)

const int N = 2e5 + 5, P = 1e9 + 7;
ll n, g[27], sum, f[N], ans;
char s[N];
void sol() {
    cin >> (s + 1); n = strlen(s + 1);
    
    s[0] = s[n + 1] = 'a' + 26;
    f[0] = g[26] = sum = 1; //神秘初值
    for(int i = 0; i <= n; i++) {
        f[i + 1] = sum;
        sum = (sum - g[s[i] - 'a'] + f[i]) % P;
        g[s[i] - 'a'] = f[i];
    }
    cout << (sum - 1 + P) % P; //空串不算
}

标签:26,limits,abc214,int,sum,Substrings,las
From: https://www.cnblogs.com/wushansinger/p/17065899.html

相关文章

  • CF1748B-Diverse Substrings
    长度为n的字符串,求出子串(只能从头尾依次删字符来得到子串)中,相同字符出现的最高次数小于等于不同字符的个数,这样的子串的个数以1~n个字符作为起点,枚举终点的位置来判断每种......
  • [LeetCode] 1759. Count Number of Homogenous Substrings
    Givenastring s,return thenumberof homogenous substringsof s. Sincetheanswermaybetoolarge,returnit modulo 109 +7.Astringis homogenou......
  • CS144 lab1: stitching substrings into a byte stream
    CS144lab1:stitchingsubstringsintoabytestream​ Lab1中我们主要实现一个叫做StreamReassembler的东西。从Lab1提供的文档中,我们可以大致了解未来我们将要自己实......
  • C. Sum of Substrings题解
    C.SumofSubstrings题目大概意思,给你一个01串,求和最小,其中和是该串所有相邻字符所组成的十进制数的和。如:0110,sum=01+11+10=22。通过观察我们可以发现,除了第......
  • B. Diverse Substrings
    题目链接:Problem-B-Codeforces输入71727741010501100639999652345618789987887987998798输出1210121015106题目大意就是给出T个用例给出一个长度为n,只包含'0'......
  • B. Diverse Substrings
    B.DiverseSubstringsAnon-emptydigitstringisdiverseifthenumberofoccurrencesofeachcharacterinitdoesn'texceedthenumberofdistinctcharacters......
  • Maximum Number of Non-overlapping Palindrome Substrings
    MaximumNumberofNon-overlappingPalindromeSubstrings、Youaregivenastring s anda positiveintegerk .Selectasetofnon-overlappingsubstringsfr......
  • CF1748B Diverse Substrings
    题链:cfluogu诈骗题。Description给你一个数字(\(0\sim9\))组成的字串,问有多少个子串满足:不同数字种类数不少于相同数字的最多出现次数。Analysis暴力思路很好想其实......
  • ABC214G
    思路参考AK_Dream大佬考虑容斥,计算钦定\(k\)位满足\(r_i=p_i\)或\(r_i=q_i\)的方案数。建出\(n\)个点,将每对\(p_i,q_i\)连边,由于每个点度数都是\(2\),所以会......
  • POJ 1226 Substrings
    DescriptionYouaregivenanumberofcase-sensitivestringsofalphabeticcharacters,findthelargeststringX,suchthateitherX,oritsinversecan......