相似度
问题描述:
有两个长度相等的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;
}