#bZDPlydlt50x5702. 计算重复

计算重复

好的,收到建议。以后我会在题目描述中确保包含样例解释。


题目描述

定义 conn(s,n)conn(s,n)nn 个字符串 ss 首尾相接形成的字符串,例如:

conn("abc",2)="abcabc"conn(\text{"abc"},2)=\text{"abcabc"}

称字符串 aa 能由字符串 bb 生成,当且仅当从字符串 bb 中删除某些字符(不改变剩余字符顺序)后可以得到字符串 aa

例如 abdbec 可以生成 abc,但是 acbbe 不能生成 abc

给定两个字符串 s1s_1s2s_2,以及两个整数 n1n_1n2n_2,求一个最大的整数 mm,满足 conn(conn(s2,n2),m)conn(conn(s_2,n_2),m) 能由 conn(s1,n1)conn(s_1,n_1) 生成。

输入格式

输入包含多组测试数据。

每组数据由 22 行组成,第一行包含 s2,n2s_2, n_2,第二行包含 s1,n1s_1, n_1

输出格式

对于每组数据输出一行表示答案 mm

样例

ab 2
acb 4
acb 1
acb 1
aa 1
aaa 3
baab 1
baba 11
aaaaa 1
aaa 20
2
1
4
7
12

样例解释

第一组数据
s2="ab", n2=2s_2 = \text{"ab"},\ n_2=2conn(s2,n2)="abab"conn(s_2,n_2)=\text{"abab"}
s1="acb", n1=4s_1 = \text{"acb"},\ n_1=4conn(s1,n1)="acbacbacbacb"conn(s_1,n_1)=\text{"acbacbacbacb"}
我们看能由它生成多少个 conn(s2,n2)conn(s_2,n_2) 连接。

  • m=2m=2:要生成 "abab"+"abab"="abababab"\text{"abab"}+\text{"abab"}=\text{"abababab"}
    可以在 conn(s1,n1)conn(s_1,n_1) 中按顺序挑出 "a c b a c b a c b a c b"\text{"a\ c\ b\ a\ c\ b\ a\ c\ b\ a\ c\ b"} 里的某些字符得到 "abababab"\text{"abababab"}(挑第 1,3,4,6,7,9,10,12 个字符)。
  • m=3m=3 则需生成 "abab"×3\text{"abab"}\times 3 长度 12,但 s1s_1 里 c 不能组成 b,若全挑 a,b 则不够,检验可知不行。
    所以答案是 2。

第二组数据
s2="acb", n2=1s_2 = \text{"acb"},\ n_2=1 → 就是 "acb"\text{"acb"}
s1="acb", n1=1s_1 = \text{"acb"},\ n_1=1 → 也是 "acb"\text{"acb"}
可以直接从 s1s_1 生成 s2s_2m=1m=1,即 conn(s2,1)conn(s_2,1) 本身。
此时 conn(s2,1)conn(s_2,1) 等于 s2s_2,显然能由 s1s_1 生成。
mm 最大为 1,因为 conn(s1,1)conn(s_1,1) 长度 3,无法包含两个 s2s_2(需 6 个字符)。
答案是 1。

第三组数据
s2="aa", n2=1s_2 = \text{"aa"},\ n_2=1"aa"\text{"aa"}
s1="aaa", n1=3s_1 = \text{"aaa"},\ n_1=3 → $conn(s_1,3)=\text{"aaa"}\times 3 = \text{"aaaaaaaaa"}$(长度 9)
需要尽可能多生成 "aa"\text{"aa"} 的连接串。
每个 "aa"\text{"aa"} 需要两个 aconn(s1,3)conn(s_1,3) 中恰好 9 个 a,最多能生成 9/2=49/2=4"aa"\text{"aa"},并且顺序可以满足。
m=4m=4 时,需要生成 "aa"×4="aaaaaaaa"\text{"aa"}\times 4 = \text{"aaaaaaaa"}(长度 8),可以从 conn(s1,3)conn(s_1,3) 中挑 8 个 a 得到。
所以 mm 最大为 4。

第四组数据
s2="baab", n2=1s_2=\text{"baab"},\ n_2=1 → 一个 "baab"\text{"baab"} 长度为 4。
s1="baba", n1=11s_1=\text{"baba"},\ n_1=11conn(s1,11)conn(s_1,11) 长度为 4×11=444\times 11=44
需要找到最多能生成多少个 conn(s2,n2)conn(s_2,n_2)"baab"\text{"baab"}
每个 "baab"\text{"baab"} 需要 b a a b 的顺序。在 conn(s1,11)conn(s_1,11) 中,每 4 个字符 b a b a,含 b 两个、a 两个,而 "baab" 需要 b(1) a(2) b(1),因此需跨单元匹配。通过贪心匹配计算得最多 7 个。
所以 m=7m=7

第五组数据
s2="aaaaa", n2=1s_2=\text{"aaaaa"},\ n_2=1 → 长度为 5 的全 a 串。
s1="aaa", n1=20s_1=\text{"aaa"},\ n_1=20conn(s1,20)conn(s_1,20) 长度为 60,全部是 a
需要生成 mms2s_2 连起来,即长度 5m5m 的全 a 串,显然只要 5m605m \le 60 即可,因此 m12m\le 12
所以 mm 最大为 12。

数据范围

  • s1s_1s2s_2 的长度均不超过 100100
  • n1,n2106n_1, n_2 \le 10^6
  • 输入总长度(所有字符串和数字总和)不超过 10410^4,但 conn(s1,n1)conn(s_1, n_1) 的长度理论可达 10810^8 量级,故不能显式构造;
  • 需要设计 O(s1s2)O(|s_1| \cdot |s_2|) 的预处理与 O(logn1)O(\log n_1)O(1)O(1) 每步查询的算法;
  • 时间限制:1 秒
  • 空间限制:64 MB