DNA序列修正
本文最后更新于 189 天前,其中的信息可能已经有所发展或是发生改变。

问题描述

在生物学中,DNA 序列的相似性常被用来研究物种间的亲缘关系。现在我们有两条 DNA 序列,每条序列由 A、C、G、T 四种字符组成,长度相同。但是现在我们记录的 DNA 序列存在错误,为了严格满足 DNA 序列的碱基互补配对即 A – T 和 C – G,我们需要依据第一条 DNA 序列对第二条 DNA 序列进行以下操作:

  1. 选择第二条 DNA 序列的任意两个位置,交换他们的字符。
  2. 选择第二条 DNA 序列任意一个位置,将其字符替换为 A、C、G、T 中的任何一个。

需要注意的是:每个位置上的碱基只能被操作一次

你的任务是通过最小的操作次数,使第二条 DNA 序列和第一条 DNA 序列互补。并且已知初始两条 DNA 序列长度均为 NN

输入格式

第一行包含一个整数 NN,(1≤N≤103)(1≤N≤103),表示 DNA 序列的长度。

接下来的两行,每行包含一个长度为 NN 的字符串,表示两条 DNA 序列。

输出格式

输出一个整数,表示让第二条 DNA 序列和第一条 DNA 序列互补所需的最小操作次数。

样例输入

5
ACGTG
ACGTC

样例输出

2

样例说明

将第二条 DNA 序列中的第一个和第四个碱基交换,将第二个和第三个碱基交换即可完成全部配对,共操作两次。

运行限制

语言最大运行时间最大运行内存
C++1s128M
C1s128M
Java2s128M
Python33s128M

答案解析:

#include <iostream>
using namespace std;
int main()
{
  int n,t = 0;cin>>n;
  string a,b;
  cin>>a>>b;
  for(auto &x:a){
    if(x=='A') x = 'T';
    else if(x=='C')x = 'G';
    else if(x=='G')x = 'C';
    else if(x=='T')x = 'A';
  }
  for(int i  = 0;i<n;i++){
    if(a[i]==b[i]) continue;
    for(int j = i+1;j<n;j++){
      if(a[i]==b[j]&&a[j]==b[i]) swap(b[j],b[i]);
    }
    t++;
  }
  cout<<t<<endl;

  return 0;
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇