【字符串】NOI--ch0107--03 基因相关性
Accept: 0 Submit: 0
Time Limit: 1 second Memory Limit : 131072 KB
Problem Description
为了获知基因序列在功能和结构上的相似性,经常需要将几条不同序列的DNA进行比对,以判断该比对的DNA是否具有相关性。
现比对两条长度相同的DNA序列。首先定义两条DNA序列相同位置的碱基为一个碱基对,如果一个碱基对中的两个碱基相同的话,则称为相同碱基对。接着计算相同碱基对占总碱基对数量的比例,如果该比例大于等于给定阈值时则判定该两条DNA序列是相关的,否则不相关。
Input
有三行,第一行是用来判定出两条DNA序列是否相关的阈值,随后2行是两条DNA序列(长度不大于500)。
Output
若两条DNA序列相关,则输出“yes”,否则输出“no”。
Sample Input
0.85
ATCGCCGTAAGTAACGGTTTTAAATAGGCC
ATCGCCGGAAGTAACGGTCTTAAATAGGCC
ATCGCCGTAAGTAACGGTTTTAAATAGGCC
ATCGCCGGAAGTAACGGTCTTAAATAGGCC
Sample Output
yes
Hint
Problem Idea
解题思路:
【题意】
求两个字符数组相同位置的相同字符个数。
【类型】
字符串
【分析】
这道题有两个注意点:
1.在读入阈值后需要再getchar()读一个回车,或者用cin.get()读回车;
2.在计算相同碱基对占总碱基对数量的比例时,不能用int/int,至少也要int/double或者int/float;不然测试样例数据时会得到相反的结果
【时间复杂度&&优化】
O(n)
Source Code
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int count=0;
float r;
char s1[501];
char s2[501];
cin>>r;
cin.get();//char ch=getchar();
gets(s1); //cin.getline(s1,501);
gets(s2); //cin.getline(s2,501);
int len=strlen(s1);
for(int i=0;i<len;i++){
if(s1[i]==s2[i]){
count++;
}
}
//cout<<count<<endl;
float rc=count/(double)len;
//cout<<rc<<endl;
if(rc>=r){
cout<<"yes"<<endl;
}
else{
cout<<"no"<<endl;
}
return 0;
}