【模拟】相似度

来源:互联网 发布:php免杀大马 编辑:程序博客网 时间:2024/04/30 07:42

相似度

问题描述:

有两个长度相等的DNA序列(只包含A,T,G,C的字符串),我们想知道它的相似度,它的相似度是这样定义的。

首先相似度为0

若在对应位置出现A与A,则相似度增加1513

若在对应位置出现A与T,则相似度增加666

若在对应位置出现T与T,则相似度增加2324

若在对应位置出现T与G,则相似度增加11

若在对应位置出现T与C,则相似度增加123

若在对应位置出现G与G,则相似度增加3999

若在对应位置出现G与C,则相似度增加521

若在对应位置出现G与A,则相似度增加423

若在对应位置出现C与C,则相似度增加4423

若在对应位置出现C与A,则相似度增加2

 

输入:

第一行一个数n,表示DNA序列的长度。

第二,三行分别有一个长度为n的字符串,表示两个DNA序列。

 

输出:

一个整数ans,表示相似度。

 

输入样例:

4

ATGC

ATGC

 

输出样例:

12259

 

数据范围:

n<=1000000


无算法可言。

#include <cstdio>#include <iostream>char a[1000010];char b[1000010];int main(){freopen("similar.in","r",stdin);freopen("similar.out","w",stdout);long n;scanf("%ld%s%s",&n,a+1,b+1);long long ans = 0;for (long i=1;i<n+1;i++){if (a[i]=='A' && b[i]=='A')ans += 1513;else if (a[i]=='A' && b[i]=='T' || a[i]=='T' && b[i]=='A')ans += 666;else if (a[i]=='T' && b[i]=='T')ans += 2324;else if (a[i]=='T' && b[i]=='G' || a[i]=='G' && b[i]=='T')ans += 11;else if (a[i]=='T' && b[i]=='C' || a[i]=='C' && b[i]=='T')ans += 123;else if (a[i]=='G' && b[i]=='G')ans += 3999;else if (a[i]=='G' && b[i]=='C' || a[i]=='C' && b[i]=='G')ans += 521;else if (a[i]=='G' && b[i]=='A' || a[i]=='A' && b[i]=='G')ans += 423;else if (a[i]=='C' && b[i]=='C')ans += 4423;else if (a[i]=='C' && b[i]=='A' || a[i]=='A' && b[i]=='C')ans += 2;}std::cout << ans;return 0;}