loj#P6174. 「美团 CodeM 初赛 Round B」合并字符串的价值

「美团 CodeM 初赛 Round B」合并字符串的价值

题目描述

输入两个串 a,ba,b ,你需要把 a,ba,b 组合成一个串 cc ,使得 c=a+b|c|=|a|+|b|cc 可以拆成两个没有重复元素的子序列的并,使得一个子序列为 aa ,另一个子序列为 bb 。 一个字符串 ss 的价值定义如下( n=s>1n=|s|>1 ):

枚举所有的分界线 1kn11 \leq k \leq n-1,令u=s[1,k],v=s[k+1,n]u=s_{[1,k]},v=s_{[k+1,n]} ,将 u,vu,v 的字符重新排列使得 u,vu,v 的最长公共前缀最大,所有可能的分界线中 u,vu,v 的最长公共前缀的最大值就是这个字符串的价值。

例如字符串 ACGTTTGCAT\texttt{ACGTTTGCAT} 的价值为 55 ,因为均分成两半之后得到 u=ACGTT,v=TGCATu=\texttt{ACGTT},v=\texttt{TGCAT} ,重新排列之后可以做到 u=vu=v 即最长公共前缀为 55

你需要求出所有可能的 cc 中价值最大的字符串,输出这个最大价值即可。

输入格式

第一行一个整数 TT

接下来 2T2T 行,每两行两个字符串分别代表 a,ba,b

输出格式

对于每组数据输出一行一个整数表示价值最大的 cc 的价值。

2
ACGT
ACGT
AACCGGTT
ACACAGAT
4
7

数据范围与提示

T500T \leq 500

a,b100,000;a+b500,000|a|,|b| \leq 100,000;\sum |a|+|b| \leq 500,000

a,ba,b 的字符集为 {A,C,G,T}\{\texttt{A,C,G,T}\}