codeforces-#674-F
九月 30, 2020
题意
给出一个长度为2e5的字符串只含有a,b,c,? 四个字符
可以将”?”替换成a/b/c,
问所有情况下 有多少子序列为”abc”
对于第一个样例:
ac?b?c 共有 24个”abc”子序列
- “acabac” — there are 2 subsequences “abc”,
- “acabbc” — there are 4 subsequences “abc”,
- “acabcc” — there are 4 subsequences “abc”,
- “acbbac” — there are 2 subsequences “abc”,
- “acbbbc” — there are 3 subsequences “abc”,
- “acbbcc” — there are 4 subsequences “abc”,
- “accbac” — there is 1 subsequence “abc”,
- “accbbc” — there are 2 subsequences “abc”,
- “accbcc” — there are 2 subsequences “abc”.
题解
设计dp(i,char) 表示第i个字符为b/c 时前i个字符构成的子序列ab/abc有几个
单独统计a的前缀数量和‘?’的前缀数量(记为q)
当这一位的字符为‘a’的时候, 只有a的数量会发生变化。
这里需要思考的是,‘a’字符的变化不只是单纯的+1,而是$3^q$, q 为这个位置之前的‘?’字符的个数。
当这一位的字符为‘b’的时候 , 只有dp(i,b),(即ab )的数量+a;
当这一位的字符为‘c’的时候 , 只有dp(i,c),(即abc)的数量+b;
当这一位的字符为‘?’的时候 , dp(i,c)=dp(i,c)×3+b,dp(i,b)×3+a,a=3×a+$3^q$;
1 |
|
查看评论