[USACO | Python] 201703B2 Bovine Genomics

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

USACO

题目为我手翻
 

=====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()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值