初等元素论
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

小S最近在玩一款叫做「原神」的游戏。在游戏中,玩家可以使用技能对敌人造成带有元素附着的伤害。为了简单起见,本题只考虑两种元素:「冰元素」和「火元素」。对敌人造成元素伤害时,如果敌人当前附着了另一种类型的元素,则会引发元素反应,消耗敌人一定量的元素附着,同时按照一定比例提高本次造成的伤害。具体的元素附着和反应规则如下:
「冰元素」伤害:
  • 如果敌人当前没有元素附着或已附着「冰元素」,则将敌人附着的元素量刷新为1单位「冰元素」,本次造成的伤害不变。
  • 如果敌人当前附着了「火元素」,则引发「融化」反应,消耗敌人0.5单位「火元素」,本次造成的伤害变为1.5倍
「火元素」伤害:
  • 如果敌人当前没有元素附着或已附着「火元素」,则将敌人附着的元素量刷新为1单位「火元素」,本次造成的伤害不变。
  • 如果敌人当前附着了「冰元素」,则引发「融化」反应,消耗敌人所有「冰元素」,本次造成的伤害变为2倍
小S有 n 个技能,第 i 个技能的元素类型为 e_i,伤害值为 d_i。小S想知道,通过重新排列这 n 个技能的使用顺序,最大可以对一个初始没有元素附着的敌人造成多少伤害。

输入描述:

有多组测试数据。第一行输入一个整数 T1 \le T \le 10^5)表示测试数据组数,对于每组测试数据:
第一行包含一个整数 n1 \le n \le 10^5),表示技能的数量。
接下来的 n 行每行包含一个字符和一个整数,分别表示第 i 个技能的元素类型 e_i 和伤害值 d_i1 \le d_i \le 10^9)。其中,e_i 为 'C' 表示「冰元素」,为 'P' 表示「火元素」。
保证所有数据 n 之和不超过 10^6

输出描述:

每组数据输出一行一个数,表示通过最优排列技能顺序可以造成的最大总伤害值,保留一位小数。
注意:即使最终答案为整数,输出时也需保留一位小数。只有答案与正确答案完全一致时,才会被接受。
示例1

输入

复制
2
5
C 7
P 3
C 2
C 8
P 2
3
P 10
P 20
P 30

输出

复制
32.5
60.0

说明

对于第一组样例数据,一种最优的技能使用顺序如下表所示:
技能描述
使用前元素附着
使用后元素附着
技能伤害
P 2
无元素附着
1单位「火元素」
2
C 7
1单位「火元素」
0.5单位「火元素」
7 \times 1.5 = 10.5
C 8
0.5单位「火元素」
无元素附着
8 \times 1.5 = 12
C 2
无元素附着
1单位「冰元素」
2
P 3
1单位「冰元素」
无元素附着
3 \times 2 = 6
总伤害值为 2 + 10.5 + 12 + 2 + 6 = 32.5