令d[i]为第i个样本数据,cnt为样本个数,经过化简可得

\[ans=\frac{\sum(d[i]^2)}{cnt}-(\frac{\sum d[i]}{cnt})^2\]

枚举每一种可能的三核苷酸,得到它出现的各个位置,假设当前出现了tot个,第i个的编号为a[i],经过化简可得

\[cnt+=C_{tot}^2\]

\[\sum d[i]+=\sum (a[i+1]-a[i])i(tot-i)\]

\[\sum (d[i]^2)+=tot\sum(a[i]^2)-(\sum a[i])^2\]

时间复杂度$O(n)$。

#include<cstdio>
#include<cstring>
#define N 100010
typedef long long ll;
int T,n,i,j,tot[64],q[64][N];ll cnt,sumd,sumd2,s,s2;char a[N];
inline ll C2(ll x){return x*(x-1)/2;}
inline ll sqr(ll x){return x*x;}
double sqr(double x){return x*x;}
double solve(){
scanf("%s",a+1);n=strlen(a+1);
for(i=1;i<=n;i++){
if(a[i]=='A')a[i]=0;
else if(a[i]=='G')a[i]=1;
else if(a[i]=='C')a[i]=2;
else a[i]=3;
}
for(cnt=sumd=sumd2=i=0;i<64;i++)tot[i]=0;
for(i=1;i<n-1;i++)j=a[i]|(a[i+1]<<2)|(a[i+2]<<4),q[j][++tot[j]]=i;
for(i=0;i<64;i++)if(tot[i]>=2){
cnt+=C2(tot[i]);
for(j=1;j<tot[i];j++)sumd+=1LL*(q[i][j+1]-q[i][j])*j*(tot[i]-j);
for(s=s2=0,j=1;j<=tot[i];j++)s+=q[i][j],s2+=sqr(1LL*q[i][j]);
sumd2+=s2*tot[i]-sqr(s);
}
if(!cnt)return 0;
return 1.0*sumd2/cnt-sqr(1.0*sumd/cnt);
}
int main(){
for(scanf("%d",&T);T--;printf("%.6f\n",solve()));
return 0;
}

  

BZOJ2468 : [中山市选2010]三核苷酸的更多相关文章

  1. bzoj 2468: [中山市选2010]三核苷酸

    2468: [中山市选2010]三核苷酸 Description 三核苷酸是组成DNA序列的基本片段.具体来说,核苷酸一共有4种,分别用’A’,’G’,’C’,’T’来表示.而三核苷酸就是由3个核苷酸 ...

  2. BZOJ 2467: [中山市选2010]生成树 [组合计数]

    2467: [中山市选2010]生成树 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 638  Solved: 453[Submit][Status][ ...

  3. BZOJ_2467_[中山市选2010]生成树_数学

    BZOJ_2467_[中山市选2010]生成树_数学 [Submit][Status][Discuss] Description 有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边组成 ...

  4. [bzoj2467][中山市选2010]生成树_快速幂

    生成树 bzoj-2467 中山市选2010 题目大意:题目链接 注释:略. 想法:首先,考虑生成树的性质.每两个点之间有且只有一条路径.我们将每个五边形的5条边分为外面的4条边和内部的一条边,在此简 ...

  5. BZOJ 2467: [中山市选2010]生成树

    有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边组成的圈.在中心的这个n边圈的每一条边同时也是某一个五角形的一条边,一共有n个不同的五角形.这些五角形只在五角形圈的中心的圈上有公共的 ...

  6. bzoj2467: [中山市选2010]生成树

    Description 有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边组成的圈.在中心的这个n边圈的每一条边同时也是某一个五角形的一条边,一共有n个不同的五角形.这些五角形只在五角 ...

  7. [BZOJ2467] [中山市选2010] 生成树 (排列组合)

    Description 有一种图形叫做五角形圈.一个五角形圈的中心有1个由n个顶点和n条边组成的圈.在中心的这个n边圈的每一条边同时也是某一个五角形的一条边,一共有n个不同的五角形.这些五角形只在五角 ...

  8. 2019.01.02 bzoj2467: [中山市选2010]生成树(矩阵树定理)

    传送门 矩阵树定理模板题. 题意简述:自己看题面吧太简单懒得写了 直接构建出这4n4n4n个点然后按照题面连边之后跑矩阵树即可. 代码: #include<bits/stdc++.h> # ...

  9. BZOJ 2467: [中山市选2010]生成树(矩阵树定理+取模高斯消元)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2467 题意: 思路:要用矩阵树定理不难,但是这里的话需要取模,所以是需要计算逆元的,但是用辗转相减会 ...

随机推荐

  1. [转载]HTML5 真的会消灭原生App吗?

    http://mp.weixin.qq.com/s?__biz=MzA5NjQ4MzkyMw==&mid=201728945&idx=1&sn=8f43b5bb10695efc ...

  2. NIO学习(1)-入门学习

    一.NIO概念 IO:标准IO,也既阻塞式IO NIO:非阻塞式IO 二.NIO与标准IO的IO工作方式 标准IO基于字节流和字符流进行操作 NIO是基于通道(Channel)和缓冲区(Buffer) ...

  3. CodeForces 1059C

    Description Let's call the following process a transformation of a sequence of length nn . If the se ...

  4. 第7月第12天 opengles background

    1. After your app exits its applicationDidEnterBackground: method, it must not make any new OpenGL E ...

  5. 恶意代码分析实战-确认EXE什么时候编译的

    场景 确认开源的后门在中毒机器上是什么版本,具有什么功能. 思路 1.查看样本PE里的编译时间 2.对照开源后门里组件的编译时间 技术点 查看NT头-TimeDateStamp struct IMAG ...

  6. lombok使用说明

    简介lombok 的官方网址:http://projectlombok.org/lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码.特别是相对于 POJO, ...

  7. 005_ss-link.info的ping探测工具

    用小工具ping.py测试距离您最快的节点 #!/usr/bin/env python # coding: utf-8 """ A pure python ping im ...

  8. springboot---->集成mybatis开发(一)

    这里面我们介绍一下springboot与mybatis的集成,主要完成了mybatis的真分页.一个成熟的人往往发觉可以责怪的人越来越少,人人都有他的难处. springboot简单集成mytbati ...

  9. Windwos8.1下配置PHP环境

    一.     下载安装包: Apache2.2:http://mirrors.cnnic.cn/apache//httpd/binaries/win32/httpd-2.2.25-win32-x86- ...

  10. ERP渠道文档管理(二十四)

    基本需求: 用例图: 存储过程: CREATE PROCEDURE [dbo].[BioErpCrmChannelDocument_ADD] @DocumentID int, @ChannelID i ...