hiho_1052_基因工程】的更多相关文章

题目大意 给出一个字符串(长度<=1000),字符串中的字符均为ATCG中的某一个.给出一个数字K,通过更改字符串中的某些字符,可以使得字符串的前K个字符形成的子串和最后K个字符形成的子串相同,求出最少更改的字符个数. 分析 理解题意,画图之后,仿佛是KMP的结果,但是这和KMP没啥关系...画图分析之后,知道问题应该分情况讨论:记 len 为字符串的长度,result为最少更改的字符个数. (1) len >= 2*K     两个子串中间没有重合,直接进行比较相应位置上的字符,不同resu…
传送门:基因工程 这道题拖了好久,一直没有清晰的思路. 当然,$K\le\frac{N}{2}$时,比较简单.下面我着重讲一下当$K>\frac{N}{2}$,即前$K$个字符与后$K$个字符有重叠时,如何思考这个问题. 为了便于分析,我们把题目要求形式化成如下的数学表示 假设修改后的字符串为$S$,字符串长度为$N$,则$S$满足 \[S_i = S_{i+N-K} \qquad   1 \le i \le K \] 即“$S$是以$N-K$为周期的字符串”. 这样讲对吗?我们回忆一下数学上周…
#1052 : 基因工程 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho正在进行一项基因工程实验.他们要修改一段长度为N的DNA序列,使得这段DNA上最前面的K个碱基组成的序列与最后面的K个碱基组成的序列完全一致. 例如对于序列"ATCGATAC"和K=2,可以通过将第二个碱基修改为"C"使得最前面2个碱基与最后面两个碱基都为"AC".当然还存在其他修改方法,例如将最后一个碱基改为"T&quo…
链接 问题描述 小Hi和小Ho正在进行一项基因工程实验.他们要修改一段长度为N的DNA序列,使得这段DNA上最前面的K个碱基组成的序列与最后面的K个碱基组成的序列完全一致. 例如对于序列"ATCGATAC"和K=2,可以通过将第二个碱基修改为"C"使得最前面2个碱基与最后面两个碱基都为"AC".当然还存在其他修改方法,例如将最后一个碱基改为"T",或者直接将最前面两个和最后面两个碱基都修改为"GG". 小H…
描述 小Hi和小Ho正在进行一项基因工程实验.他们要修改一段长度为N的DNA序列,使得这段DNA上最前面的K个碱基组成的序列与最后面的K个碱基组成的序列完全一致. 例如对于序列"ATCGATAC"和K=2,可以通过将第二个碱基修改为"C"使得最前面2个碱基与最后面两个碱基都为"AC".当然还存在其他修改方法,例如将最后一个碱基改为"T",或者直接将最前面两个和最后面两个碱基都修改为"GG". 小Hi和小Ho…
HihoCoder#1052:基因工程 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho正在进行一项基因工程实验.他们要修改一段长度为N的DNA序列,使得这段DNA上最前面的K个碱基组成的序列与最后面的K个碱基组成的序列完全一致. 个碱基与最后面两个碱基都为"AC".当然还存在其他修改方法,例如将最后一个碱基改为"T",或者直接将最前面两个和最后面两个碱基都修改为"GG". 小Hi和小Ho希望知道在所有方…
题目来源:基因工程 解题思路:假设基因序列长度为N,则需要计算基因序列前K个和后K个相同所需要的最少改变次数sum. 假设基因序列为 ATACGTCT (即M=8),K=6:interval=M-K=2: 0  1  2  3  4  5  6  7 sq1    A  T  A C  G  T  C  T sq2    A  C G T   C  T 从上图可以看出,标有相同彩色的字符相同,sq1的下标为0的字符与sq2的下标为0的字符相同,即 sq1[0]==sq1[2],由此可以得出sq1…
题目链接:http://hihocoder.com/problemset/problem/1052 题意:中文题面,就是修改其中几个字符,使得[0,k-1]和[n-k,n-1]的字符相同. 会发现一个问题就是,每n-k个字符都是相同的. 所以每次找n-k个字符,统计不同字符个数,把它们统一替换成出现次数最多的那个. #include <bits/stdc++.h> using namespace std; ; int n, k; char s[maxn]; ]; int main() { //…
题目大意:给你$n$个串$p_i$,最后再给一个串$s$(字符集均为A,C,G,T四个字符中的一个).问你串$s$最少要更改多少个字符(更改后的字符也只能是ACGT),才能满足s中不包含$p_i$$(1≤i≤n)$ 数据范围:$n≤50$,$|p|≤20$,$|s|≤100$.不超过100组数据. 此题显然是一个AC自动机DP题. 我们首先建出字符串集合$p$的AC自动机. 不难发现,这个自动机中有很多个节点是不能被遍历到的(如果遍历到了串就会包含某些不合法串) 设$f[i][j]$表示我们已经…
题面 不想写了...留坑吧... 基本思想可参照随机化解决判同问题的总结 代码: #include<bits/stdc++.h> using namespace std; #define N 4200 #define M 300 #define ull unsigned long long ull sum[N][5],w[N]; char s[N][N],mp[M]; ull rn() { return (ull)rand()<<15|rand(); } int main() {…