题目描述

三核苷酸是组成DNADNADNA序列的基本片段。具体来说,核苷酸一共有444种,分别用’A’,’G’,’C’,’T’’A’,’G’,’C’,’T’’A’,’G’,’C’,’T’来表示。而三核苷酸就是由333个核苷酸排列而成的DNADNADNA片段

三核苷酸一共有646464种。给定一个长度为LLL的DNADNADNA序列,一共可以分辨出(L−2)(L-2)(L−2)个三核苷酸。现在我们想用一些统计学的方法来进行一些分析,步骤如下:

1.1.1.对于这(L−2)(L-2)(L−2)个三核苷酸,我们从左到右给予编号,分别为111到L−2L-2L−2。

2.2.2.从这(L−2)(L-2)(L−2)个三核苷酸挑选一对出来,一共有(L−2)∗(L−3)/2(L-2)*(L-3)/2(L−2)∗(L−3)/2种可能。如果某一对三核苷酸是一样的,我们就记录他们之间的距离。他们之间的距离定义为他们的编号之差。

3.3.3.根据我们所记录的“样本数据”,我们现在需要计算样本数据的方差。如果样本的大小n=0n=0n=0,那么我们认为S2=X=0S2=X=0S2=X=0。

题目解析

设aveaveave为平均数,kkk为有多少对,t[i]t[i]t[i]为有每对的值对,答案是

ANS=(ave∗ave∗k+sum(t[i]2)−2∗ave∗sum(t[i]))/kANS=(ave*ave*k+sum(t[i]^2)-2*ave*sum(t[i]))/kANS=(ave∗ave∗k+sum(t[i]2)−2∗ave∗sum(t[i]))/k

由此可知,不用得到每个t[i]t[i]t[i],只要知道所有t[i]t[i]t[i]的和以及平方和。

设a[i]a[i]a[i]为每对的位置,cnt[i]cnt[i]cnt[i]为有多少个片段与iii的相同,sum[i]sum[i]sum[i]为t[i]t[i]t[i]的和,sqr[i]sqr[i]sqr[i]为t[i]t[i]t[i]的平方和

sum[a[i]]+=cnt[a[i]]∗i−sums[a[i]]sum[a[i]]+=cnt[a[i]]*i-sums[a[i]]sum[a[i]]+=cnt[a[i]]∗i−sums[a[i]]{加入第iii段时更新t[i]t[i]t[i]的和}

sqr[a[i]]+=cnt[a[i]]∗i∗i+sqrs[a[i]]−2∗i∗sums[a[i]]sqr[a[i]]+=cnt[a[i]]*i*i+sqrs[a[i]]-2*i*sums[a[i]]sqr[a[i]]+=cnt[a[i]]∗i∗i+sqrs[a[i]]−2∗i∗sums[a[i]]{根据平方和公式,加入第iii段时更新t[i]t[i]t[i]的平方和}

最后化简公式可得ans=ans=ans=所有t[i]t[i]t[i]的平方和−t[i]-t[i]−t[i]和的平方

代码

#include<bits/stdc++.h>
#define N 100005
using namespace std;
int T;
long long a[N],cnt[N],sqrs[N],sums[N],sum[N],sqr[N],gs,x,y;
double ans;
char c[N];
string s;
int main()
{freopen("tri.in","r",stdin);freopen("tri.out","w",stdout);scanf("%d",&T);while(T--){for(int i=111;i<=444;i++)sqr[i]=sum[i]=sqrs[i]=sums[i]=cnt[i]=0; scanf("%s",c);s=c;for(int i=0;i<s.size();i++)if(s[i]=='A') a[i]=1;else if(s[i]=='G') a[i]=2;else if(s[i]=='C') a[i]=3;else a[i]=4;for(int i=0;i<s.size()-2;i++)a[i]=a[i]*100+a[i+1]*10+a[i+2];for(int i=0;i<s.size()-2;i++){sqr[a[i]]+=cnt[a[i]]*i*i+sqrs[a[i]]-2*i*sums[a[i]]; sum[a[i]]+=cnt[a[i]]*i-sums[a[i]];sqrs[a[i]]+=(long long)i*i;sums[a[i]]+=i;cnt[a[i]]++;}gs=x=y=ans=0;for(int i=111;i<=444;i++)gs+=cnt[i]*(cnt[i]-1)/2,x+=sqr[i],y+=sum[i];if(gs==0) ans=0;else ans=(1.0*x/gs)-(1.0*y/gs)*(1.0*y/gs);printf("%0.6lf\n",ans);}
}

[Jzoj] 2197. 三核苷酸相关推荐

  1. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  2. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...

  3. [jzoj NOIP2018模拟 11.01]

    很庆幸打了这场模拟赛,因为这一场爆零 好像上次纪中的某场比赛我也出现了同样的问题,光是计算时间复杂度而忘记了空间的限制.想必是比上次惨的,考场上就写了两题而这两题都因为MLE爆零了.而且我T2还码了7 ...

  4. 【DP】小学生语文题(jzoj 5102)

    正题 jzoj 5102 题目大意 给你两个串A,B,字母个数相等,可以把B的一个字符移到前面某个位置,问你最少移多少次可以使A,B相等 解题思路 设fi,jf_{i,j}fi,j​为A匹配了i-n, ...

  5. 【二分】防具布置/秦腾与教学评估(ybtoj 二分-1-2/jzoj 1253/luogu 4403)

    正题 ybtoj 二分-1-2 jzoj 1253 luogu 4403 题目大意 给出n组数:si,ei,dis_i,e_i,d_isi​,ei​,di​ 对于每组数据,表示在sis_isi​加1, ...

  6. 【归并排序】奶牛的图片(jzoj 1812)

    奶牛的图片 jzoj 1812 题目大意 给你一个序列,你可以交换相邻的两个数 让你用最少的交换次数来使得这个序列变成形如a+1,a+2...n,1,2...a−1,aa+1,a+2...n,1,2. ...

  7. 【归并排序】休息(jzoj 3462)

    休息 jzoj 3462 题目大意 给你一个序列,你每一回合把它划分成尽可能少的单调递减的序列(第一次划分到的序列长度都是偶数),然后把每个序列翻转,问你把它变成单调递增的序列要翻转多少次 输入样例 ...

  8. 秀姿势(jzoj 3464)

    秀姿势 jzoj 3464 题目大意 有n个数,每个数都有一个分组,现在问你最多去掉k个分组后,做多有多少个数是连续的同组的 输入样例 9 1 2 7 3 7 7 3 7 5 7 输出样例 4 样例解 ...

  9. 小麦亩产一千八(jzoj 3461)

    小麦亩产一千八 jzoj 3461 题目大意 给你一个正整数序列:a0,a1,a2a_0,a_1,a_2a0​,a1​,a2​-- a0a_0a0​为1 a1a_1a1​为p ax=ax−1+ax−2 ...

最新文章

  1. python网页查询然后返回结果_使用pythondjang在html页面上显示查询到的API结果
  2. 设置默认settings文件_Django 学习笔记系列 之 settings.py 设定
  3. 一句代“.NET技术”码实现批量数据绑定[上篇]
  4. C# 创建Word项目标号列表、多级编号列表
  5. java.lang.unsatisfiedlinkerror:_java.lang.UnsatisfiedLinkError: 的问题
  6. Sorry,关注这些 IT 技术类公众号,真的可以为所欲为
  7. HashMap + 软引用进行缓存
  8. java实现中缀表达式转后缀表达式
  9. python ocr 文字识别软件,Python文字截图识别OCR工具实例解析
  10. java实现EXcel的RC地址变成常规地址
  11. 下载 LINUX 和 windows 版本下 MySQL5.7.32
  12. mybatis 中collection中需要 open close separator
  13. etherboot无盘启动
  14. 2022年电子商务概论(农)之章节课后题
  15. LaTeX beamer中minipage添加脚注(footnote)
  16. 网页中图片显示不出来,解决网页中图片不能显示的方法
  17. 【Pic】图片怎么去除马赛克?
  18. oracle等差数列,数列的通项公式的教案
  19. 【网络工程】二层与三层交换机都知道 那么四层交换机是什么?
  20. 【Linux-scp】scp命令

热门文章

  1. Rabbitmq小书
  2. 软件测试工程师的“初—中—高”晋升之路
  3. 从WebService到面向服务架构SOA理解【二】
  4. Ubuntu的网络共享
  5. svn无法checkout问题
  6. windows中bat脚本编写
  7. 超声波测距仪编程_关于基于51单片机的超声波测距仪的汇编编程问题
  8. strchr()函数与strrchr()函数的实现
  9. 特征提取 - 海森矩阵(Hessian Matrix)及一个用例(图像增强)
  10. 淘宝评论接口调用展示