基因工程 HihoCoder - 1052(有意思)

2024-04-23 20:58

本文主要是介绍基因工程 HihoCoder - 1052(有意思),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小Hi和小Ho正在进行一项基因工程实验。他们要修改一段长度为N的DNA序列,使得这段DNA上最前面的K个碱基组成的序列与最后面的K个碱基组成的序列完全一致。  

例如对于序列"ATCGATAC"和K=2,可以通过将第二个碱基修改为"C"使得最前面2个碱基与最后面两个碱基都为"AC"。当然还存在其他修改方法,例如将最后一个碱基改为"T",或者直接将最前面两个和最后面两个碱基都修改为"GG"。

小Hi和小Ho希望知道在所有方法中,修改碱基最少的方法需要修改多少个碱基。

Input

第一行包含一个整数T(1 <= T <= 10),代表测试数据的数量。

每组测试数据包含2行,第一行是一个由"ATCG"4个大写字母组成的长度为N(1 <= N <= 1000)的字符串。第二行是一个整数K(1 <= K <= N)。

Output

对于每组数据输出最少需要修改的碱基数量。

Sample Input

2  
ATCGATAC  
2  
ATACGTCT
6 

Sample Output

1  
3   

这道题目一开始完全没有思路。后来看了大神的代码,还是大佬牛逼,什么都可以想出来。

题意是一段字符串,然后截取前K个,在从后往前截取K个,就这两段字符串进行对比,然后你可以改变一些字符。使这两个字符串完全匹配,输出这个最小的改变字符的数量。题意就是这么的简单,但是我不会做这道题,题意再简单也没有用。看了大神的代码,我就用手在纸上画了画模拟的过程。确实很奇妙。

例如 ABCDAB 这个字符串,我们都知道最后的换取结果是 ABABAB,换掉C和D ,就可以了。但是这个过程计算机怎么实现呢?首先列出截取4个后的两个字符串,为 ABCD CDAB ,因为是有交叉字符出现的情况,可能我们还掉一个就可以使很多字符都可以相同的。两个字符串一 一对应后,(下标我先定为从1开始)1,3,5,是对应的,而2,4,6,这个循环节是(n-k)(n是长度,k世是截取数量),是对应的位置,我们就可以将这个问题换成1,3,5   和2,4,6 这两块问题了,看怎么换掉才是最小的数量。分块数量是for(int i=0;i<(循环节);i++) ,这样就将问题分为好几个块,这样就将问题简单化。

然后,就是找到最小的数量,就是 比如   ABCDAB 这样的 截取4个 的时候, C ,D字符是重复的,所以现在就可以比较A,C,A的数量,因为 A,C 是对应的 ,这个 C与下一个A ,也是对应的,这个C出现2次,另外两个 A出现1次,我们人脑想想也是将C换成A,换成数量多的那一个(A有2个,C有一个) ,所以就将C换为A,这个就是最少的换的字符了。每一次分块都是这样算。

 

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<set>
#include<vector>
const int maxn=100005;
using namespace std;
#include<map>
#include<string>
#include<string.h>
typedef long long ll;int main()
{int t;scanf("%d",&t);char s[maxn];int k;while(t--){scanf("%s",s);scanf("%d",&k); int len=strlen(s);if(2*k<=len){int ans=0;for(int i=0;i<k;i++){if(s[i]!=s[len-k+i])ans++;}printf("%d\n",ans);}else	{int ans=0;int jie=len-k;for(int i=0;i<jie;i++){int a[4]={0};for(int j=i;j<len;j+=jie){if(s[j]=='A')a[0]++;else if(s[j]=='T')a[1]++;else if(s[j]=='G')a[2]++;	else if(s[j]=='C')a[3]++;}int maxshu=-1;int sum=0;for(int j=0;j<4;j++){maxshu=max(maxshu,a[j]);sum+=a[j];}ans+=sum-maxshu;}printf("%d\n",ans);}}return 0;
}

思路就是这样。 很巧妙。                                      

 

这篇关于基因工程 HihoCoder - 1052(有意思)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/929865

相关文章

P1149 [NOIP2008 提高组] 火柴棒等式(一个比较有意思的题)

P1149 [NOIP2008 提高组] 火柴棒等式 #include <bits/stdc++.h>using namespace std;int n, ans, a[11111]={6, 2, 5, 5, 4, 5, 6, 3, 7, 6};bool vis[11111][11111];int main(){cin >> n;//计算每个数需要的火柴棒for(int i=10;

HDU 1052(贪心)

题意:田忌赛马。田忌和齐王各有n匹马,输入田忌的马的速度和齐王的马的速度。每一轮田忌赢了就得200两银子,平就得0两,输了就失去200两银子。问田忌最多能得到多少。题目的策略是贪心,分析见leokan大牛的blog,这里也转一下,留存根。 http://hi.baidu.com/leokan/blog/item/126da06e1dab5ade80cb4a4f.html 算法可以用DP,

#1121 : 二分图一•二分图判定 (HIHOCoder +二分图的判定)

#1121 : 二分图一•二分图判定 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 大家好,我是小Hi和小Ho的小伙伴Nettle,从这个星期开始由我来完成我们的Weekly。 新年回家,又到了一年一度大龄剩男剩女的相亲时间。Nettle去姑姑家玩的时候看到了一张姑姑写的相亲情况表,上面都是姑姑介绍相亲的剩男剩女们。每行有2个名

hihoCoder #1174:拓扑排序·一

【题目链接】:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 由于今天上课的老师讲的特别无聊,小Hi和小Ho偷偷地聊了起来。 小Ho:小Hi,你这学期有选什么课么? 小Hi:挺多的,比如XXX1,XXX2还有XXX3。本来想选YYY2的,但是好像没有先选过YYY1,不能选YYY2。 小Ho:先修课程真是个麻烦的东西

【hihocoder #1506 : 投掷硬币】递推

【链接】:hihocoder #1506 : 投掷硬币 【题目】: 1506 : 投掷硬币 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi有一枚神奇的硬币。已知第i次投掷这枚硬币时,正面向上的概率是Pi。 现在小Hi想知道如果总共投掷N次,其中恰好M次正面向上的概率是多少。 输入 第一行包含两个整数N和M。 第二行包含N个实数P1, P

HihoCoder上网络流算法题目建模总结

经过了几天的学习和做题,我利用刘汝佳书上的网络流算法模板完成了HihoCoder上的几个网络流算法,HihoCoder可能还会继续更新网络流算法,所以我也会接着总结。 这个主要是对网络流算法的建模做分析和理解,不具体分析网络流算法,网络流算法会单独总结。 网络流一·Ford-Fulkerson算法 题目连接 本题没有建模,就是标准的网络最大流求解,将图建完后直接应用最大流算法即可解决。但在

C程序设计几个有意思的小例子

1.从键盘输入整数n(n>1),将n分解为若干质数(素数)之积。例如, 当n=10时,输出结果为2,5, 当n=40时,输出结果为2,2,2,5, **代码实现: void fenjie(int n){int i=2; scanf("%d,",n);while (n>i){if(n%i==0){printf("%d,",i);n=n/i;}elsei++;}printf("%d,

【九度】题目1052:找x

题目1052:找x 时间限制:1 秒内存限制:32 兆特殊判题:否提交:4671解决:2504 题目描述: 输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。 输入: 测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。 输出: 对于每组输入,请输出结果。 样例输

有意思的第三方jar包记录

先做个记录,等有时间了可以仔细研究下。 1、org.kie 2、spillway 用于限速

hihocoder--数字三角形

问题描述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他们来到了大洋彼岸的美国。美国人民的生活非常有意思,经常会有形形色色、奇奇怪怪的活动举办,这不,小Hi和小Ho刚刚下飞机,就赶上了当地的迷宫节活动。迷宫节里展览出来的迷宫都特别的有意思,但是小Ho却相中了一个其实并不怎么像迷宫的迷宫——因为这个迷宫的奖励非常丰富~ 于是小Ho找到了小Hi,让小Hi帮助他获取尽可能