【模拟】相似度

相似度

问题描述:

有两个长度相等的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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值