Farmer John 有 N 头斑点牛和 N 头普通牛, 他刚上完了一节关于基因的课程,所以 Farmer John 现在十分肯定的认为这些斑点牛都是某一位置的基因突变造成的。
Farmer John对他的牛的基因进行了排序,每一串基因 M 都是由4个单独的字母 A T G C 组成的,当他把这些基因全部排列出来,他得到了一个表格,这里展示的为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就可以预测他的牛是斑点牛还是普通牛(这里A,G表示斑点牛,C表示普通牛)位置1的无法区别奶牛因为A既可以是斑点牛也可以是普通牛
给出 John的奶牛,请计算所有能区分出斑点与普通奶牛的位置的数量,输入格式(file cownomics.in):
第一行包含两个由空格分开的 N,M,大小均不超过100. 后面的前 N 行包含斑点牛的基因,后面的另外 N 行包含普通牛的基因
输出格式(file cownomics.out):
输出所有的能通过直接观察得到奶牛是否为斑点牛的基因的位置数量
输入样例:
3 8 AATCCCAT GATTGCAA GGTCGCAA ACTCCCAG ACTCGCAT ACTTCCAT输出样例:
1题目为我手翻
=====Analysis=====
这一道题在USACO Guide上被标记为NORMAL
是一道比较简单的枚举 | 暴力破解的题
这里只需要简单把每一数列的斑点和普通牛的基因进行对比,如果有一个相同的,就不行
换而言之就是在这一数列中只要是斑点牛与普通的没有相同基因,即为答案
=====Code=====
#201703B2
#Bovine Genomics
#https://usaco.org/index.php?page=viewproblem2&cpid=736
def solve():
result = 0
for i in range(M):
spotted = []
plain = []
for s in range(N):
spotted.append(cows[s][i])
for p in range(N,N*2):
plain.append(cows[p][i])
if len(set(spotted) & set(plain)) == 0:
result += 1
return fout.write(f"{result}\n")
fin = open("cownomics.in",'r')
fout = open("cownomics.out",'w')
lines = lines = fin.read().splitlines()
N ,M = (int(x) for x in lines[0].split())
cows = [list(lines[i]) for i in range(1,2*N+1)]
solve()
fout.close()