题目描述
农夫舒婧拥有n头有斑点的奶牛和n头没有斑点的奶牛。由于她刚刚完成了关于牛的基因的一门课程,所以她相信,她的奶牛身上的斑点是由于奶牛基因组上单个位置的基因突变引起的。农夫舒婧花费了巨大的代价,把她的奶牛的基因组进行了排序。每一个基因组都是一个由ACGT四个字母组成的长度为m的字符串。当她排列她的牛的基因组时,她得到了以下的表格,(此时n=3)
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | … | M |
有斑点的牛 1 | A | A | T | C | C | C | A | … | T |
有斑点的牛 2 | G | A | T | T | G | C | A | … | A |
有斑点的牛 3 | G | G | T | C | G | C | A | … | A |
无斑点的牛 1 | A | C | T | C | C | C | A | … | G |
无斑点的牛 2 | A | C | T | C | G | C | A | … | T |
无斑点的牛 3 | A | C | T | T | C | C | A | … | T |
仔细观察这张表,她推测,位置2是基因组中可能解释斑点的潜在位置。也就是说,通过查看这张表,农夫舒婧可以预测她的哪头奶牛是有斑点的,哪些不是(这里,A或G意味着斑点,C意味着无斑点; T是无关紧要的,因为它不会出现在任何奶牛的位置2)。位置1本身不足以解释斑点,因为这个位置的A可能表明一头斑点的牛或一头无斑点牛。
给出农民舒婧的奶牛的基因组,请计算潜在解释斑点的数目。
输入输出格式
输入格式(文件名 cownomics.in):
输入数据第一行包含两个小于100的正整数N和M。下一行至第N+1行每行包含一串长为M的字符串,表示斑点牛的基因组。第N+2行至最后每行同样包含一串长为M的字符串,表示普通奶牛的基因组。
输出格式(文件名 cownomics.out):
请计算在基因组中可能导致斑点病的位置的数量(一个大于等于0,小于等于M的整数)。
样例输入输出
样本输入
3 8
AATCCCAT
GATTGCAA
GGTCGCAA
ACTCCCAG
ACTCGCAT
ACTTCCAT
样本输出
1
分析:这个提议大家也许很难看懂。意思就是如果这一组的有斑点奶牛和无斑点奶牛包括的字母全部不一样的话,记住,是全部不一样!(如第二组),那么就是一个位置。代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("cownomics.in","r",stdin);
freopen("cownomics.out","w",stdout);
string s[102],s1[102];
long int ss=0,i,j,n,m,len,k;
bool f=1;
cin>>n>>len;
for (i=1;i<=n;i++) cin>>s[i];//有斑点奶牛
for (i=1;i<=n;i++) cin>>s1[i];//无斑点奶牛
for (j=0;j<=len-1;j++){//从列循环
f=1;//判断这个位置是否为有斑点奶牛
for (m=1;m<=n;m++){//循环有斑点
for (i=1;i<=n;i++){//循环无斑点奶牛
if (s[m][j]==s1[i][j]) {f=0;break;}//如果一有相同,就说明不是
}
if (!f) break;//如果不是的话,这个也不用循环了,直接退出
}
if (f) ss++;//如果是数目加一
}
cout<<ss;//输出
return 0;
}
- 0 Comment
- 编程竞赛
- 2020年5月5日