描述

小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

题意:

给定一个字符串,问改变最小的字符,使得前k个字符和后k个字符相同。

思路:

模拟即可。然而我是用的dfs+排序,把有关系的分到一个组,然后这个组的最小改动=字符数目-最多的一种的数目。比如aaaabbc,肯定是把其他改成a。

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
int used[maxn];
char chr[maxn];
int cnt,q[maxn],K,L,ans;
void dfs(int x)
{
used[x]=;q[++cnt]=chr[x]-'A';
if(x<=K&&!used[L-K+x]&&x-K+L<=L&&L-K+x>=) dfs(L-K+x);
if(x>L-K&&!used[x+K-L]&&x+K-L<=L&&x+K-L>=) dfs(x+K-L);
return ;
}
int main()
{
int T,i,j;
scanf("%d",&T);
while(T--){
scanf("%s",chr+);
scanf("%d",&K);
memset(used,,sizeof(used));ans=;
L=strlen(chr+);
for(i=;i<=L;i++){
if(!used[i]&&(i<=K||i>L-K)){
cnt=;
dfs(i);
sort(q+,q+cnt+);
int delta=,tmp=,pre=-;
for(j=;j<=cnt;j++){
if(q[j]==pre) tmp++;
else {
delta=max(delta,tmp);
pre=q[j];tmp=;
}
}
delta=max(delta,tmp);
ans+=cnt-delta;
}
}
printf("%d\n",ans);
}
return ;
}

HihoCoder1052基因工程(简单模拟题)的更多相关文章

  1. 2019浙大校赛--A--Thanks, TuSimple!(简单模拟题)

    这题前三段都是一堆吹爆赞助商的屁话,正式题目在图片下边,一个简单模拟题. 题目大意: 有n个男生,m个女生在进行舞会,其中一部分男生祥和比自己矮的女生跳舞,一部分男生想和比自己高的女生跳舞,一部分女生 ...

  2. UVa 679 小球下落 简单模拟题,树

    题目大意:给你一个完全二叉树,并且给他们编号,编号规则为左子树为2*k,右子树为2*k+1,每一个节点 上都有一个开关,初始时开关都处于关闭状态,小球碰到节点就会改变该点的开关的状态.然后给你I个小球 ...

  3. POJ 1008 简单模拟题

    e.... 虽然这是一道灰常简单的模拟题.但是米做的时候没有读懂第二个日历的计时方法.然后捏.敲完之后华丽的WA了进一个点.坑点就在一年的最后一天你是该输出本年的.e ...但是我好想并没有..看di ...

  4. HDU 4772 Zhuge Liang&#39;s Password (简单模拟题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4772 题面: Zhuge Liang's Password Time Limit: 2000/1000 ...

  5. UVA 1594 Ducci Sequence(紫书习题5-2 简单模拟题)

    A Ducci sequence is a sequence of n-tuples of integers. Given an n-tuple of integers (a1, a2, · · · ...

  6. POJ-3078.Shuffle'm Up(简单模拟题)

    这道题做了有四个小时吧,今天一整天都处于边玩边学的状态,我很是不喜欢...一开始用了20分钟模拟,过了样例后TLE了,就在考虑是不是判断是否重复判定的数组开大了,结果一直蛙,后面想到了map判重,结果 ...

  7. HDU 5059 Help him(简单模拟题)

    http://acm.hdu.edu.cn/showproblem.php?pid=5059 题目大意: 给定一个字符串,如果这个字符串是一个整数,并且这个整数在[a,b]的范围之内(包括a,b),那 ...

  8. HDU 1234 简单模拟题

    题目很简单不多说了,我只是觉得这题目的输入方式还是很有特点的 #include <cstdio> #include <cstring> #include <algorit ...

  9. sdut1598 周游列国【简单模拟题】

    周游列国 Time Limit: 1000ms   Memory limit: 32768K  有疑问?点这里^_^ 题目描述 题目链接:http://acm.sdut.edu.cn/sdutoj/p ...

随机推荐

  1. 例子 使用sqlite3 数据库建立数据方式

    #!/usr/bin/env python#coding:utf-8import sqlite3#建立一个数据库cx = sqlite3.connect("E:/test.db") ...

  2. ES5与ES6常用语法教程之 ③模板字符串、判断字符串是否包含其它字符串

    这部分教程我们主要讲解以下几个常用语法 模板字符串 带标签的模板字符串 判断字符串中是否包含其他字符串 给函数设置默认值 模板字符串 老式的拼接字符串方法 let dessert = '

  3. xgboost的使用

    1.首先导入包 import xgboost as xgb 2.使用以下的函数实现交叉验证训练xgboost. bst_cvl = xgb.cv(xgb_params, dtrain, num_boo ...

  4. __str__,__repr__,__add__

    class School: def __init__(self,name,addr,type): self.name=name self.addr=addr self.type=type def __ ...

  5. 解析之Apache解析

  6. FTL2

    ABSTACT 1.NAND flash memory  (主要缺点): (1)partial page updates (2)general-purpose cache usually does n ...

  7. jquery创建元素并添加到另一个元素中

    $('<tr>').data('code', code)        .append(            // 方法            $('<td>').appen ...

  8. 模仿Spy++抓某窗口消息

    核心函数 SetWindowsHookExA API文档:https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-s ...

  9. 02-Zookeeper介绍及安装

    1 Zookeeper介绍 ZooKeeper是为分布式应用所设计的高可用.高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务.分布式应用可以基于它实现更高级的服务,实现诸如同步服务.配置 ...

  10. Intel Driver and Support Assistant 安装失败

    Intel Driver and Support Assistant 以下简称 Intel DSA. Intel DSA 依赖 Microsoft Visual C++ 2015-2019 Redis ...