結果
問題 | No.2907 Business Revealing Dora Tiles |
ユーザー | 👑 amentorimaru |
提出日時 | 2024-09-17 01:18:16 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 3,417 bytes |
コンパイル時間 | 5,176 ms |
コンパイル使用メモリ | 82,068 KB |
実行使用メモリ | 114,520 KB |
最終ジャッジ日時 | 2024-09-23 13:09:22 |
合計ジャッジ時間 | 68,508 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 689 ms
93,524 KB |
testcase_01 | AC | 658 ms
86,424 KB |
testcase_02 | AC | 659 ms
86,176 KB |
testcase_03 | AC | 714 ms
86,460 KB |
testcase_04 | AC | 732 ms
86,704 KB |
testcase_05 | AC | 702 ms
86,708 KB |
testcase_06 | AC | 787 ms
88,480 KB |
testcase_07 | AC | 679 ms
86,196 KB |
testcase_08 | AC | 676 ms
86,596 KB |
testcase_09 | AC | 698 ms
86,828 KB |
testcase_10 | AC | 683 ms
86,584 KB |
testcase_11 | AC | 1,656 ms
93,992 KB |
testcase_12 | AC | 715 ms
87,324 KB |
testcase_13 | AC | 698 ms
86,564 KB |
testcase_14 | AC | 704 ms
87,196 KB |
testcase_15 | AC | 708 ms
86,712 KB |
testcase_16 | AC | 680 ms
86,308 KB |
testcase_17 | AC | 709 ms
86,700 KB |
testcase_18 | AC | 960 ms
88,752 KB |
testcase_19 | AC | 742 ms
87,328 KB |
testcase_20 | AC | 693 ms
86,580 KB |
testcase_21 | AC | 2,083 ms
98,344 KB |
testcase_22 | AC | 887 ms
87,960 KB |
testcase_23 | AC | 1,070 ms
90,656 KB |
testcase_24 | AC | 1,540 ms
91,956 KB |
testcase_25 | AC | 1,522 ms
92,200 KB |
testcase_26 | AC | 1,558 ms
92,728 KB |
testcase_27 | AC | 1,566 ms
92,312 KB |
testcase_28 | AC | 1,617 ms
92,592 KB |
testcase_29 | AC | 1,581 ms
93,232 KB |
testcase_30 | AC | 1,554 ms
91,940 KB |
testcase_31 | AC | 1,536 ms
92,064 KB |
testcase_32 | AC | 1,606 ms
91,804 KB |
testcase_33 | AC | 1,431 ms
92,188 KB |
testcase_34 | AC | 1,517 ms
92,192 KB |
testcase_35 | AC | 1,568 ms
92,188 KB |
testcase_36 | AC | 1,487 ms
92,468 KB |
testcase_37 | AC | 1,515 ms
93,216 KB |
testcase_38 | AC | 1,601 ms
92,968 KB |
testcase_39 | AC | 1,564 ms
92,844 KB |
testcase_40 | AC | 1,503 ms
92,336 KB |
testcase_41 | AC | 1,689 ms
92,460 KB |
testcase_42 | AC | 1,562 ms
92,708 KB |
testcase_43 | AC | 1,618 ms
92,208 KB |
testcase_44 | TLE | - |
testcase_45 | -- | - |
testcase_46 | -- | - |
testcase_47 | -- | - |
testcase_48 | -- | - |
testcase_49 | -- | - |
testcase_50 | -- | - |
testcase_51 | -- | - |
testcase_52 | -- | - |
testcase_53 | -- | - |
testcase_54 | -- | - |
testcase_55 | -- | - |
testcase_56 | -- | - |
testcase_57 | -- | - |
testcase_58 | -- | - |
testcase_59 | -- | - |
ソースコード
import sys from collections import Counter input = sys.stdin.readline def read_values(): return map(int, input().split()) def read_list(): return list(read_values()) mod=998244353 pre_prod = [[0] * 256 for _ in range(256)] pre_inv = [0] * 256 def nim_product(a,b,d=6): if min(a,b) <= 1: return a*b if a < 256 and b < 256 and pre_prod[a][b]: return pre_prod[a][b] d -= 1 d_pow = 1 << d d_pow_pow = 1 << d_pow if a < d_pow_pow and b < d_pow_pow: return nim_product(a,b,d) au = a >> d_pow al = a - (au << d_pow) bu = b >> d_pow bl = b - (bu << d_pow) aubu = nim_product(au,bu,d) aubl = nim_product(au,bl,d) albu = nim_product(al,bu,d) albl = nim_product(al,bl,d) res = ((aubu ^ aubl ^ albu) << d_pow) ^ (nim_product(aubu, d_pow_pow // 2, d)) ^ (albl) if a < 256 and b < 256: pre_prod[a][b] = res pre_prod[b][a] = res return res def nim_product_inv(a,d=6): if a<256: return pre_inv[a] d_pow = 1 << (d-1) if a < (1<<d_pow): return nim_product_inv(a,d-1) au = a >> d_pow al = a - (au << d_pow) half_inv = nim_product_inv(nim_product(au ^ al, al, d) ^ nim_product(nim_product(au, au, d - 1), 1 << (d_pow - 1)), d - 1) return (nim_product(half_inv, au, d) << d_pow) ^ nim_product(half_inv, au ^ al, d) def main(): for a in range(1,256): for b in range(1,256): c = nim_product(a,b) if c==1: pre_inv[a]=b pre_inv[b]=a n,t=read_values() h=list() for i in range(t): h.append(read_list()) h[-1] = [v-1 for v in h[-1]] use=[-1]*t for c0 in range(n-1,-1,-1): for r in range(t): if h[r][c0]==0 or use[r] != -1: continue use[r]=c0 r0=r break else: continue inv = nim_product_inv(h[r0][c0]) h[r0] = [nim_product(v,inv) for v in h[r0]] for r in range(t): if r == r0: continue for c in range(n): h[r][c] ^= nim_product(h[r0][c],h[r][c0]) base_a = [[0] * n for _ in range(n)] for i in range(t): if use[i] != -1: base_a[use[i]] = h[i] ans=0 mul=pow(2,64,mod) def dfs(a, add, pop, column): nonlocal ans if column < 0: if pop%2: ans-=add else: ans+=add ans%=mod return a0=[r[:column] for r in a[:column]] add0=add if a[-1][-1]==0: add0*=mul add0%=mod dfs(a0,add0,pop,column-1) for c0 in range(column-1,-1,-1): if a[-1][c0]: ainv = nim_product_inv(a[-1][c0]) ar=[nim_product(ainv,m) for m in a[-1]] for r in range(column): for c in range(column): if r==c0: if a0[r][c0] != ar[c0]: a0[r][c] ^= ar[c] else: a0[r][c] ^= nim_product(ar[c], a0[r][c0]) break dfs(a0,add,pop+1,column-1) dfs(base_a,1,0,n-1) print(ans%mod) if __name__ == "__main__": main()