UOJ Logo Universal Online Judge

UOJ

#172. 【WC2016】论战捆竹竿

附件下载 统计

这是一个美好的下午,小 W 和小 C 在竹林里切磋捆竹竿的技艺。

竹林里有无数根完全一样的短竹子,每一根竹子由 n 节组成。

这些竹子比较特别,每一节都被染上了颜色。可能的颜色一共 26 种,分别用小写英文字母 az 表示。也就是说,如果把竹子的底端到顶端的颜色按顺序写出来可以排成一个由小写英文字母组成的字符串。

小 W 和小 C 都是捆竹竿的高手,他们知道怎样才能把零散的短竹子捆成一整根长竹竿。初始时你拿着一根短竹子作为当前的竹竿。每次你可以选择一根短竹子,短竹子底端若干节(可以是 0 节)与竹竿的最上面若干节对应地一节一节捆起来,而短竹子前面剩下的节伸出去,这样就得到了一根更长的竹竿。注意,竹子的底端是靠近根部的那一端,不可以颠倒。

小 W 对竹竿的审美要求很高,他捆竹竿时有一个癖好:如果两根竹子的某两节被捆在了一起,那么它们的颜色必须相同。

我们假设一根短竹子从底端到顶端每节的颜色为 aba

那么两根竹子可以首尾捆在一起,可以得到一根颜色为 abaaba 的竹竿;也可以将第一根顶端的一节 a 与第二根底端的一节 a 捆在一起,得到一根颜色为 ababa 的竹竿;还可以直接将每一节都对应起来,捆成一根颜色为 aba 的竹竿。

假设我们在颜色为 ababa 的竹竿顶端再捆一根竹子,则可以捆成 ababaabaabababaababa 三种不同的情况。

但是小 C 在这个问题上有不同的看法,他认为小 W 捆不出很多种长度不同的竹竿。小 W 非常不服,于是他找到了你——现在请你求出在竹竿长度不超过 w 的情况下,小 W 可以捆出多少种长度不同的竹竿。其中,竹竿的长度指从底端到顶端的竹子的节的个数。

注意:如果 w<n,则没有合法的长度,此时答案为 0

输入格式

第一行包含 1 个正整数 T,为数据组数。

每组数据的第一行包含 2 个正整数 nw,表示短竹子的长度和竹竿的长度上限。

每组数据的第二行包含一个长度为 n 的字符串,该字符串仅由小写英文字母构成,表示短竹子从底端到顶端每节的颜色。

输出格式

输出共 T 行,每行包含一个整数表示捆成竹竿的不同长度种数。

样例一

input

1
4 11
bbab

output

5

explanation

可以捆成长度不超过 11 的竹竿有 6 种不同的情况:

  1. bbab
  2. bbabbab
  3. bbabbbab
  4. bbabbabbab
  5. bbabbabbbab
  6. bbabbbabbab

后两种竹竿长度相同,因此不同长度的竹竿共有 5 种。长度分别为:4,7,8,10,11

样例二

input

2
44 1000
baaaaaabaabbaaabbbbabbbaaabbbababaaabaaabaaa
41 1000
abaabbabaaabaabbbbbbbbbbbababbbbaaabaabbb

output

195
24

样例三

见样例数据下载。

限制与约定

对于所有的测试数据,保证所有的字符串均由小写字母构成,保证 T=5

各测试点满足以下约定:

测试点编号 n w 约束
11010s 仅包含字母 ab
22020
31001018
4
5103
6
75×104105
8
9
10
117×1041018
12
13105
14
15
16
175×105
18
19
20

时间限制:1s

空间限制:256MB

下载

样例数据下载