結果

問題 No.1056 2D Lamps
ユーザー convexineqconvexineq
提出日時 2020-05-15 23:02:05
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 1,451 ms / 3,000 ms
コード長 1,525 bytes
コンパイル時間 111 ms
コンパイル使用メモリ 12,800 KB
実行使用メモリ 37,476 KB
最終ジャッジ日時 2024-09-19 12:33:22
合計ジャッジ時間 15,393 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 28 ms
10,752 KB
testcase_01 AC 30 ms
10,752 KB
testcase_02 AC 27 ms
10,880 KB
testcase_03 AC 1,433 ms
37,344 KB
testcase_04 AC 1,430 ms
37,472 KB
testcase_05 AC 1,451 ms
37,344 KB
testcase_06 AC 1,436 ms
37,340 KB
testcase_07 AC 1,427 ms
37,340 KB
testcase_08 AC 1,423 ms
37,348 KB
testcase_09 AC 1,011 ms
37,340 KB
testcase_10 AC 1,078 ms
37,216 KB
testcase_11 AC 1,410 ms
37,476 KB
testcase_12 AC 1,429 ms
37,340 KB
testcase_13 AC 27 ms
10,880 KB
testcase_14 AC 33 ms
11,136 KB
testcase_15 AC 32 ms
11,264 KB
testcase_16 AC 31 ms
11,136 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def get_generator(n):
    v = (1<<n)-1
    res = [v<<(n*i) for i in range(n)]
    v = 0
    for i in range(n):
        v ^= 1<<(i*n)
    res += [v<<i for i in range(n)]
    
    r = [0]*(2*n-1)
    s = [0]*(2*n-1)
    for i in range(n):
        for j in range(n):
            r[i+j] ^= 1<<(n*i+j)
            s[i-j+n-1] ^= 1<<(n*i+j)
    res += r+s
    return res


def get_basis(a):
    basis = [] #基底をためる配列
    for e in a:
        for b in basis:
            if e > e^b: e = e^b
        if e: basis.append(e)
    return basis

def normalize(v,basis,length):
    for e,l in zip(basis,length):
        if v&(1<<(l-1)):
            v ^= e
    return v

# coding: utf-8
# Your code here!
import sys
read = sys.stdin.read
readline = sys.stdin.readline 

#n,q,*m = list(map(int,read().split()))
n,m = map(int,readline().split())

MOD = (1<<32)-1
basis = get_basis(get_generator(n))
length = [i.bit_length() for i in basis]
#print(get_generator(n))
#print(basis)
#print(length)


mat = "".join(read().split())
d = {}

for T in range(m):
    c = "".join("0" if j=="." else "1" for j in mat[T*n*n:(T+1)*n*n])
    #print(c,int(c,2),"c")
    key = normalize(int(c,2),basis,length)
    #print(key)
    if key in d:
        d[key].append(T)
    else:
        d[key] = [T]


#print(d)

ans = [["0"]*m for i in range(m)]
for k,v in d.items():
    for a in v:
        for b in v:
            if a < b: ans[a][b] = "1"

#print(*("".join(i) for i in ans),sep="\n")

for i in range(m-1):
    print("".join(ans[i][i+1:]))





0