#2217. 徐老师的机器命令

徐老师的机器命令

题目描述

最近黄老师到徐老师家做客,但是没想到机器人的控制器居然被徐老师放在了沙发上

于是黄老师一屁股坐在了控制器上,在黄老师做完客离开家里以后

徐老师发现机器人被输入了一连串的指令!

但是幸好的是,机器人收到的指令中只有两种指令:充电(C)移动(M)

这让徐老师相当心疼,因为机器人进行移动是会导致磨损的!

而徐老师当然可以擦除机器人现在收到的指令序列,但是擦除指令也会对机器人造成损伤!

机器人现在的指令序列可以用一个仅包含 CCMM 的字符串表示

由于随机擦除指令会极大的影响机器人的 CPUCPU 使用寿命,所以徐老师只会从指令序列的开头或者结尾擦除指令,不会擦除中间的指令

即如果指令序列为 CCMMCCCCMMCC,徐老师可以擦除开头的指令变成 CMMCC,MMCC,MCCCMMCC,MMCC,MCC \dots 可以擦除结尾的指令变成 CCMMC,CCMM,CCM,CCCCMMC,CCMM,CCM,CC \dots,也可以两段都擦除一部分变成 CMMC,MM,MCMMC,MM,M \dots,当然也可以不擦除任何命令

这样可以让徐老师擦除指令时对机器人的损伤达到最小,但是不可避免的损伤依旧存在两种:

  1. 擦除指令时,每擦除一个 CC 指令会对机器人造成 11CPUCPU 损伤
  2. 剩余的指令集中,每存在一个 MM 指令会对机器人造成 11 点物理损伤

徐老师只会关心两种损伤中比较大的损伤是多少

现在徐老师想知道,对于一个指令序列,怎么擦除指令可以使得机器人最终受到的损伤最小?

输入格式

第一行包含一个整数 TT 表示有多组测试数据

对于每组测试数据包含一行仅由大写字母 C,MC,M 组成的字符串,其中 CC 代表充电指令,MM 代表移动指令

输出格式

对于每组测试数据,输出一行包含一个整数表示最小的损伤

数据范围

数据点编号 字符串长度 lenlen 其他
131 \sim 3 1len1001 \leq len \leq 100
454 \sim 5 1len200001 \leq len \leq 20000 每个指令序列中不超过 1010CC
676 \sim 7 每个指令序列中不超过 1010MM
8108 \sim 10

对于 100%100\% 的数据保证,1T101 \leq T \leq 10

样例输入1

5
CMCCCMCCM
CMMCMMCMMCMMC
MMMMCCCCCC
MMMMM
CCCC

样例输出1

1
3
0
0
0

样例解释1

第一组测试数据:CMCCCMCCM(CM)CCCMCC(M)CMCCCMCCM \rightarrow (CM)CCCMCC(M) 移除的 CC11 个,剩余的 MM11 个,损伤为 max(1,1)=1max(1,1)=1

第二组测试数据:CMMCMMCMMCMMC(CMMCMM)CMMC(MMC)CMMCMMCMMCMMC \rightarrow (CMMCMM)CMMC(MMC) 移除的 CC33 个,剩余的 MM22 个,损伤为 max(3,2)=3max(3,2)=3

第三组测试数据:MMMMCCCCCC>(MMMM)CCCCCCMMMMCCCCCC -> (MMMM)CCCCCC 移除的 CC00 个,剩余的 MM00 个,损伤为 max(0,0)=0max(0,0)=0

第四组测试数据:MMMMM>(MMMMM)MMMMM -> (MMMMM) 移除的 CC00 个,剩余的 MM00 个,损伤为 max(0,0)=0max(0,0)=0

第五组测试数据:CCCC>CCCCCCCC -> CCCC 移除的 CC00 个,剩余的 MM00 个,损伤为 max(0,0)=0max(0,0)=0

以上对于每组测试数据均只提供一种可能方案,方案可能不止一种