CSU Monthly 2012 Apr Problem B: 信使核糖核酸转录后剪接

Problem B: 信使核糖核酸转录后剪接

信使核糖核酸(mRNA)是由DNA单链转录而来。
DNA单链是由A、C、G、T四种核苷酸相接而成的长链。长链的两端是不同的,分别称为5’端和3’端。
mRNA也类似,不同的是,mRNA不含有T核苷酸,而是用U核苷酸代替。
一条DNA单链转录出来的mRNA是与其反向平行互补的。所谓反向平行,是指mRNA的5’端和3’端与DNA的两端正好相反。但习惯上都按5’到3’的顺序书写DNA和mRNA。
所谓互补,是指DNA与mRNA上的核苷酸必须以固定的方式两两配对。其配对方式如下:
DNA   mRNA 
A ---- U
C ---- G
G ---- C
T ---- A
对于真核生物来说,mRNA转录完成后,还要从中剪去一部份,剩下的部份再按原顺序连接起来,才是最终的产物。(当然也有可能不需要剪接)
现在给定一条DNA单链信息和最终的mRNA信息,请判断这条mRNA是否可能是由此DNA单链转录后剪接而成。

Input

多组测试数据。每组两行。
第一行是一个字符串,只含有A、C、G、T四个大写字母,0<长度<=1000000,表示一条DNA单链上的核苷酸,按5’到3’的方向顺序给出。
第二行是一个字符串,只含有A、C、G、U四个大写字母,0<长度<=1000000,表示一条最终mRNA上的核苷酸,按5’到3’的方向顺序给出。

Output

每组测试数据输出一行。如果这条mRNA可能是由这条DNA单链转录后剪接而来(或不需要剪接),则输出“YES”(不含引号);如果不可能,则输出“NO” (不含引号)。

Sample Input

AGTCGTATCTGCTGA
UCAAUGAC
TACAGCTGA
CACUG
CTAGCAGTTGTACTCATCA
AUGACAUGC
CATCTAGGCAGCT
AUCUGAUC
TCAG
AGUC
TCAG
CUGA

Sample Output

YES
YES
YES
NO
NO
YES

算法思路:先把DNA序列x[1..n]按位 转化为对应的mRNA上的核苷酸a[1..n],然后读入待分析的mRNA序列b[1..m],进行按位对比即可。

#include<stdio.h>
#include<string.h>
char a[1000005];
char b[1000005];
int main()
{
	freopen("in","r",stdin);
	while(scanf("%s",a)!=EOF){
		int i,j,len_a,len_b;
		char c;
		len_a = strlen(a);
		for(i=0;i<len_a;i++){
			if(a[i] == 'A') a[i] = 'U';
			else if(a[i] == 'C') a[i] = 'G';
			else if(a[i] == 'G') a[i] = 'C';
			else if(a[i] == 'T') a[i] = 'A';
		}
		scanf("%s",b);
		len_b = strlen(b);
		for(i=0,j=len_b-1;i<len_a;){
			if(j==0) break;
			if(a[i] == b[j]){
				i++; j--;
			}
			else i++;
		}
		if(j==0) printf("YES\n");//如果j==0,说明b序列按序存在于a序列里
		else printf("NO\n");
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值