[中山市选2010]三核苷酸
三核苷酸是组成 DNA 序列的基本片段。核苷酸共有 4 种,分别用 A、G、C、T 表示。三核苷酸是由 3 个核苷酸排列而成的 DNA 片段,共有 64 种,如 AAA、AAG、……、GGG。
给定一个长度为 L 的 DNA 序列,可以从中分辨出 L−2 个三核苷酸。现在需要使用以下统计方法对该序列进行分析:
- 将这 L−2 个三核苷酸从左到右依次编号为 1 到 L−2。
- 从这 L−2 个三核苷酸中任选一对,共有 2(L−2)(L−3) 种可能。如果一对三核苷酸完全相同,就记录它们之间的距离。两个三核苷酸之间的距离定义为它们的编号之差。
- 将记录的所有距离作为样本数据,并计算样本方差。
设样本数据为 x1,x2,…,xn,其平均值为
X=nx1+x2+⋯+xn,
方差为
S2=n(x1−X)2+(x2−X)2+⋯+(xn−X)2.
如果样本大小 n=0,则规定 S2=X=0。
例如,对于 DNA 序列 ATATATA,其中的三核苷酸依次为:
- L1:
ATA;
- L2:
TAT;
- L3:
ATA;
- L4:
TAT;
- L5:
ATA。
相同三核苷酸之间的距离分别为:
(L1,L3)=2,(L1,L5)=4,(L3,L5)=2,(L2,L4)=2.
因此,样本数据为 2,4,2,2,其平均值为
X=42+4+2+2=2.5,
方差为
S2=4(2−2.5)2+(4−2.5)2+(2−2.5)2+(2−2.5)2=0.75.
给定一个 DNA 序列,请计算其样本方差。
输入格式
输入包含多组测试数据。
第一行包含一个正整数 T,表示测试数据的组数。
接下来 T 行,每行包含一个仅由 A、G、C、T 组成的字符串,表示待统计的 DNA 序列。
输出格式
对于每组测试数据,输出一行答案,即将 S2 按十进制四舍五入保留 6 位小数后的结果。
评测将对保留 6 位小数后的结果进行精确判定。
样例输入
1
ATATATA
样例输出
0.750000
样例解释
样本数据为 2,4,2,2,其平均值为 2.5,方差为 0.75。
数据范围
- T 为正整数;
- 对于每组测试数据,DNA 序列的长度 L 满足 3≤L≤105;
- DNA 序列仅包含字符
A、G、C、T。
来源与许可
本题为中山市选 2010 试题「三核苷酸」,题面与测试数据整理自 BZOJ。
样例 1
输入
1
ATATATA
输出
0.750000