8.21 米哈游笔试
第一题
- 分数计算
- 写的可能有些复杂了,不过逻辑不难
- 注意分子是0和分母是1的情况就好
- AC
def first():
import math
f, o, g = input().split(' ')
# 1/8 + 3/8
a, b = map(int, f.split('/'))
c, d = map(int, g.split('/'))
if o == '+':
u = a * d + b * c
l = b * d
t = math.gcd(u, l)
elif o == '-':
u = a * d - b * c
l = b * d
t = math.gcd(u, l)
elif o == '*':
u = a * c
l = b * d
t = math.gcd(u, l)
else:
u = a * d
l = b * c
t = math.gcd(u, l)
if u == 0:
print(0)
elif l // t == 1:
print(u // t)
else:
print(str(u // t) + '/' + str(l // t))
第二题
- 想法是把每一行当作一个二进制数
- 看有没有若干个数的和正好是全一的二进制数,即和正好是 2^m-1,m是列长
- AC
- 其实逻辑上是有漏洞的,16楼老哥指出来了,sum求和用异或代替应该就对了
def second():
n, m = map(int, input().split(' '))
matrix = []
for _ in range(n):
matrix.append(eval('0b' + ''.join(input().split(' '))))
from itertools import combinations
target = 2 ** m - 1
for i in range(1, n + 1):
for c in combinations(matrix, i):
if sum(c) == target:
print('YES')
break
else:
continue
break
else:
print('NO')