把 26 个大写字母之间的“矛盾关系”看作一个无向图的边。对一个右端点固定的子串,若它是“和谐”的,则右端点字符不能与窗口内任何与其矛盾的字母同时出现。
用滑动窗口(双指针)从左到右扫描:
conflict[26][26] 的布尔矩阵,conflict[a][b]=conflict[b][a]=true 表示字母 a 与 b 互相矛盾。小钟拿到一段长度为 q、全是大写英文字母的文本,记作 w。可这 26 个字母并不总能和睦共处,
共有 p 组字母彼此冲突,记成 (x1,1,x1,2),(x2,1,x2,2),…,(xp,1,xp,2) 。
对于某段文本 u ,其被称为和睦,当且仅当其中任意两个字符都不构成冲突。
请你帮小钟算一算,w 里所有连续且非空的片段之中,和睦的片段有几条?
须知,两段片段算作不同,当且仅当它们落在文本里的起止下标不一样。
举例,文本 w=AAAA 时,w1,2=AA 与 w2,3=AA 要当成两条片段。
首行给出两个整数 q(1≤q≤2∗105) 、p(0≤p≤500) ,依次代表文本 w 的长度以及彼此冲突的字母对数。
次行给出文本 w 。
随后 p 行,第 i 行两个字符 xi,1、xi,2 ,表明 xi,1 与 xi,2 彼此冲突。
保证任意字符都不会跟自身起冲突。冲突关系允许重复出现。
打印一个数字,即 w 里有几条连续片段是和睦的。
输入
5 1
ABCBA
A C
输出
10
说明
本组数据里一共有 15 条片段:A、B、C、B、A、AB、BC、CB、BA、ABC、BCB、CBA、ABCB、BCBA、ABCBA ,其中 10 条不会把 A 与 C 同时包含进来。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册