P1070

[中山市选2010]三核苷酸

[中山市选2010]三核苷酸

三核苷酸是组成 DNA 序列的基本片段。核苷酸共有 44 种,分别用 A、G、C、T 表示。三核苷酸是由 33 个核苷酸排列而成的 DNA 片段,共有 6464 种,如 AAA、AAG、……、GGG。

给定一个长度为 LL 的 DNA 序列,可以从中分辨出 L−2L-2 个三核苷酸。现在需要使用以下统计方法对该序列进行分析:

  • 将这 L−2L-2 个三核苷酸从左到右依次编号为 11 到 L−2L-2。
  • 从这 L−2L-2 个三核苷酸中任选一对,共有 (L−2)(L−3)2\dfrac{(L-2)(L-3)}{2} 种可能。如果一对三核苷酸完全相同,就记录它们之间的距离。两个三核苷酸之间的距离定义为它们的编号之差。
  • 将记录的所有距离作为样本数据,并计算样本方差。

设样本数据为 x1,x2,…,xnx_1,x_2,\ldots,x_n,其平均值为

X=x1+x2+⋯+xnn,X=\frac{x_1+x_2+\cdots+x_n}{n},

方差为

S2=(x1−X)2+(x2−X)2+⋯+(xn−X)2n.S^2=\frac{(x_1-X)^2+(x_2-X)^2+\cdots+(x_n-X)^2}{n}.

如果样本大小 n=0n=0,则规定 S2=X=0S^2=X=0。

例如,对于 DNA 序列 ATATATA,其中的三核苷酸依次为:

  • L1L_1:ATA;
  • L2L_2:TAT;
  • L3L_3:ATA;
  • L4L_4:TAT;
  • L5L_5:ATA。

相同三核苷酸之间的距离分别为:

(L1,L3)=2,(L1,L5)=4,(L3,L5)=2,(L2,L4)=2.(L_1,L_3)=2,\quad (L_1,L_5)=4,\quad (L_3,L_5)=2,\quad (L_2,L_4)=2.

因此,样本数据为 2,4,2,22,4,2,2,其平均值为

X=2+4+2+24=2.5,X=\frac{2+4+2+2}{4}=2.5,

方差为

S2=(2−2.5)2+(4−2.5)2+(2−2.5)2+(2−2.5)24=0.75.S^2=\frac{(2-2.5)^2+(4-2.5)^2+(2-2.5)^2+(2-2.5)^2}{4}=0.75.

给定一个 DNA 序列,请计算其样本方差。

输入格式

输入包含多组测试数据。

第一行包含一个正整数 TT,表示测试数据的组数。

接下来 TT 行,每行包含一个仅由 A、G、C、T 组成的字符串,表示待统计的 DNA 序列。

输出格式

对于每组测试数据,输出一行答案,即将 S2S^2 按十进制四舍五入保留 66 位小数后的结果。

评测将对保留 66 位小数后的结果进行精确判定。

样例输入

1
ATATATA

样例输出

0.750000

样例解释

样本数据为 2,4,2,22,4,2,2,其平均值为 2.52.5,方差为 0.750.75。

数据范围

  • TT 为正整数;
  • 对于每组测试数据,DNA 序列的长度 LL 满足 3≤L≤1053\le L\le 10^5;
  • DNA 序列仅包含字符 A、G、C、T。

来源与许可

本题为中山市选 2010 试题「三核苷酸」,题面与测试数据整理自 BZOJ。

样例 1

输入

1
ATATATA

输出

0.750000