https://codeforces.com/contest/1669/problem/E
我的做法是容斥一下?
虽然我的队友是转成图论用入度做的(雾

input
4
6
ab
cb
db
aa
cc
ef
7
aa
bb
cc
ac
ca
bb
aa
4
kk
kk
ab
ab
5
jf
jf
jk
jk
jk
output
5
6
0
6

题意
给定 n n n 个长度为 2 2 2 仅有小写字母 a − k a-k a−k 的字符串,询问有多少对字符串满足其串上的两个位置,一个位置的字符相同,一个位置的字符不同
(可能看Note会更加理解)
思路
既然需要一个位置上的字符相同,那我从头向后遍历,查询该位置之后的字符串看对应位置上相等的字符串个数,比如:
观察样例 1 1 1,从位置 1 1 1 举例
- 对于左边:
发现只有一个 a a aa aa 的字符串与之配对,即贡献答案 1 1 1

- 对于右边
可以发现在这之后有两个 b b b 出现,可以贡献答案 2 2 2

所以我们便可以对 左和右 两边的,每种字母的,做一个前缀和
定义其数组为 : p r e [ i ] [ j ] [ k ] pre[i][j][k] pre

这篇博客讨论了一种求解给定长度为2的字符串对中,一个位置字符相同另一个位置不同的数量的方法。作者首先介绍了题意,然后提出通过遍历并计算每个位置上相同字符的字符串数量来构建前缀和。注意到相等字符串的重复计数问题,作者利用map存储每个字符串出现的次数,避免重复贡献。最后,提供了AC代码实现。
最低0.47元/天 解锁文章
423

被折叠的 条评论
为什么被折叠?



