aacord’s memo

abcを中心にpythonで解いた問題のメモ、整理をしています。緑になった。

abc 080 c (python)

i = 1 ~ 2**10-1 まで bit 全探索する問題。
与えられた F を 2 進数としてみると、i & F =1となっている桁の個数でどの P になるかが決まる。
'10' をそのまま 2 進数として扱いたいときは int( '10', 2 ) としてやる。
( print すると 10 進数表記の 2 が出力される)
最近意識せずに bit 計算の問題ばかり解いている気がする。

import sys
input = sys.stdin.readline
n = int(input())
chk = []
for _ in range(n):
  f = input().split()
  chk.append(int(''.join(f),2))

p = [] 
for _ in range(n):
  P = [int(i) for i in input().split()]
  p.append(P)

import collections
ans = -float('inf')
for i in range(1,2**10):
  que = 0
  for j,cj in enumerate(chk):
    d = format(i & cj,'b')
    c = collections.Counter(d)
    que += p[j][c['1']]
  ans = max(ans,que)
print(ans)