結果
| 問題 |
No.1560 majority x majority
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-09-11 03:46:48 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 257 ms / 2,000 ms |
| コード長 | 1,028 bytes |
| コンパイル時間 | 229 ms |
| コンパイル使用メモリ | 82,316 KB |
| 実行使用メモリ | 90,236 KB |
| 最終ジャッジ日時 | 2024-06-22 00:43:05 |
| 合計ジャッジ時間 | 7,190 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 26 |
ソースコード
#!/usr/bin/env python3
# from typing import *
import sys
import io
import math
import collections
import decimal
import itertools
import bisect
import heapq
def input():
return sys.stdin.readline()[:-1]
# sys.setrecursionlimit(1000000)
# _INPUT = """6 3
# 1 1 1
# 1 0 1
# 0 0 1
# 1 0 1
# 0 1 0
# 1 1 0
# """
# sys.stdin = io.StringIO(_INPUT)
INF = 10**10
N, M = map(int, input().split())
S = [list(map(int, input().split())) for _ in range(N)]
B = []
for i in range(N):
b = 0
for j in range(M):
if S[i][j]:
b |= (1<<j)
B.append(b)
T = []
for mask in range(1<<M):
n = 0
for i in range(N):
if mask & B[i] == mask:
n += 1
T.append(n)
dp = [0] * (1<<M)
dp[0] = 1
for mask in range(1<<M):
for j in range(M):
if mask & (1<<j):
continue
n_agree_before = T[mask]
n_agree_after = T[mask | (1<<j)]
if n_agree_after * 2 >= n_agree_before:
dp[mask | (1<<j)] += dp[mask]
ans = dp[(1<<M)-1]
print(ans)