結果

問題 No.2446 完全列
ユーザー lam6er
提出日時 2025-03-20 18:45:44
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 140 ms / 2,000 ms
コード長 1,497 bytes
コンパイル時間 148 ms
コンパイル使用メモリ 82,216 KB
実行使用メモリ 89,076 KB
最終ジャッジ日時 2025-03-20 18:46:03
合計ジャッジ時間 5,047 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

from fractions import Fraction

def matrix_mult_ab_zero(A, B, L, M, N):
    for i in range(L):
        for j in range(N):
            total = 0
            for k in range(M):
                total += A[i][k] * B[k][j]
            if total != 0:
                return False
    return True

def compute_rank(matrix):
    rows = len(matrix)
    if rows == 0:
        return 0
    cols = len(matrix[0])
    m = []
    for r in matrix:
        m_row = [Fraction(x, 1) for x in r]
        m.append(m_row)
    rank = 0
    for c in range(cols):
        if rank >= rows:
            break
        pivot_row = -1
        for r in range(rank, rows):
            if m[r][c] != 0:
                pivot_row = r
                break
        if pivot_row == -1:
            continue
        m[rank], m[pivot_row] = m[pivot_row], m[rank]
        pivot_val = m[rank][c]
        for r in range(rank + 1, rows):
            if m[r][c] == 0:
                continue
            factor = m[r][c] / pivot_val
            for ci in range(c, cols):
                m[r][ci] -= factor * m[rank][ci]
        rank += 1
    return rank

L, M, N = map(int, input().split())
A = []
for _ in range(L):
    A.append(list(map(int, input().split())))
B = []
for _ in range(M):
    B.append(list(map(int, input().split())))

if not matrix_mult_ab_zero(A, B, L, M, N):
    print("No")
else:
    rank_A = compute_rank(A)
    rank_B = compute_rank(B)
    if rank_B == M - rank_A:
        print("Yes")
    else:
        print("No")
0