#4188. Bovine Genomics 牛基因组学
Bovine Genomics 牛基因组学
题目:
Farmer John 有 N 只有斑点的牛和 N 只没有斑点的牛。经过一门牛遗传学课程的学习后,他坚信牛身上的斑点是由牛基因组中单一位置的突变所引起的。
为了验证这一假设,Farmer John 花费大量的费用对牛的基因组进行了测序。每个基因组是一个长度为 M 的字符串,由字符 A、C、G 和 T 组成。当他把这些基因组排列在一起时,他得到了如下表格(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 是可能解释斑点的一个潜在基因位置。也就是说,通过仅查看此位置的字符,Farmer John 就可以准确预测哪些牛有斑点,哪些没有。具体来说,位置 2 上如果是 A 或 G 则表示是有斑点的牛,如果是 C 则表示是没有斑点的牛;T 则无关紧要,因为在位置 2 处没有任何牛的基因序列包含 T。位置 1 不能单独解释斑点问题,因为位置 1 上的 A 可能出现在有斑点的牛或没有斑点的牛中。
给定 Farmer John 牛群的基因组数据,请计算有多少个位置可以单独解释斑点。
输入格式:
文件 cownomics.in
第一行包含两个正整数 N 和 M,表示牛的数量和基因组的长度。
接下来的 N 行是有斑点的牛的基因组,每行是一个长度为 M 的字符串。
最后的 N 行是没有斑点的牛的基因组,每行是一个长度为 M 的字符串。
输出格式:
文件 cownomics.out
输出一个整数,表示可以解释斑点的基因组位置数。即能够单独预测哪些牛有斑点、哪些没有斑点的位置数。
样例输入:
3 8
AATCCCAT
GATTGCAA
GGTCGCAA
ACTCCCAG
ACTCGCAT
ACTTCCAT
样例输出:
1
题目解析: 我们需要判断基因组的每一个位置是否能够通过该位置的基因值(如 A、C、G、T)准确地区分出有斑点的牛和没有斑点的牛。具体来说,如果某个位置的字符集能完全区分有斑点的牛和没有斑点的牛,那么这个位置就可以解释斑点的存在。
注意:
- 一个位置如果能完全区分出所有有斑点和没有斑点的牛,那么这个位置就是符合要求的。
- 我们需要对每个位置的基因值进行检查,看看是否存在某个字符在有斑点的牛和没有斑点的牛中出现过交叉。若有交叉,则该位置无法解释斑点。
问题贡献: Brian Dean