• hihocoder #1052 : 基因工程(字符串处理 + 找规律 )


    #1052 : 基因工程

    时间限制:1000ms
    单点时限:1000ms
    内存限制:256MB

    描述

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

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

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

    输入

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

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

    输出

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

    样例输入
    2  
    ATCGATAC  
    2  
    ATACGTCT
    6 
    样例输出
    1  
    3   
    
    参考博客:http://beeder.me/2014/11/02/hihocoder-problem-1052-genetic-engineering/
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <algorithm>
    
    using namespace std;
    
    int main()
    {
    	int t;
    	int i, j;
    	char s[1100];
    	scanf("%d", &t);
    	int k; int ans;
    
    	while(t--)
    	{
    		scanf("%s", s);
    		int len=strlen(s);
    		scanf("%d", &k);
    		ans=0;
    		if(2*k <=len)
    		{
    			int dd=len-k;
    			for(i=0; i<k; i++)
    			{
    				if(s[i]!=s[dd+i])
    					ans++;
    			}
    		}
    		else //有重合部分
    		{
    			int dd=len-k;
    			for(i=0; i<dd; i++ )
    			{
    				int A=0, G=0, C=0, T=0; int num=0;
    				for(j=i; j<len; j+=dd )
    				{
    					num++;
    					if(s[j]=='A') A++;
    					else if(s[j]=='G') G++;
    					else if(s[j]=='C') C++;
    					else T++;
    				}
    				int maxchar = max(A, G);
    				maxchar = max(maxchar, C);
    				maxchar = max(maxchar, T);
    				ans=ans+(num-maxchar);
    			}
    		}
    		printf("%d
    ", ans );
    	}
    	return 0;
    }
    
    
    
  • 相关阅读:
    Eclipse快捷键大全
    如何查看JDK_API 2019.2.23
    JXL、POI操作Excel
    Eclipse 将builder文件夹下的classes文件改路径到WEB-INF下,以及常用快捷键
    系统分盘
    U盘被识别为其他设备(显示U盘图标但是不显示盘符)的解决办法
    Oracle+jsp+Servlet的员工表的简单增删改查
    2019年3月8日09:06:02 mybatis 一对多
    linux 协议栈分享
    fib
  • 原文地址:https://www.cnblogs.com/yspworld/p/4363793.html
Copyright © 2020-2023  润新知