#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