結果
問題 |
No.1952 xooooooooooor
|
ユーザー |
|
提出日時 | 2024-10-06 00:56:27 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,937 bytes |
コンパイル時間 | 151 ms |
コンパイル使用メモリ | 81,888 KB |
実行使用メモリ | 835,788 KB |
最終ジャッジ日時 | 2024-10-06 00:56:33 |
合計ジャッジ時間 | 3,943 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 29 RE * 9 MLE * 1 |
ソースコード
## https://yukicoder.me/problems/no/1952 MOD = 998244353 def main(): N, M = map(int, input().split()) if N == 0: print(0) return n = N array = [] while n > 0: array.append(n % 2) n //= 2 N0 = len(array) if M > 2 * N0: s = sum(array) if s % 2 == 1: b = pow(2, M - 1, MOD) - 1 b %= MOD c = pow(2, N0, MOD) - 1 c %= MOD answer = (b - c) % MOD array3 = [1] * (M - 1 - N0) else: answer = 0 array3 = [0] * (M - 1- N0) # 前半 array1 = [0] * N0 for i in range(N0): for j in range(N0): if i + j < N0: array1[i + j] += array[j] array1[i + j] %= 2 p = 1 ans = 0 for i in range(len(array1)): if array1[i] > 0: ans += p ans %= MOD p *= 2 p %= MOD answer += ans answer %= MOD # 後半 array2 = [0] * N0 for i in range(N0): for j in range(N0): if j - i >= 0: array2[j - i] += array[j] array2[j - i] %= 2 p = pow(2, M - 1, MOD) for i in range(N0): if array2[i] > 0: answer += p answer %= MOD p *= 2 p %= MOD print(answer) else: array1 = [0] * M array1 += [0] * N0 for i in range(M): for j in range(N0): array1[i + j] += array[j] array1[i + j] %= 2 p = 1 ans = 0 for i in range(len(array1)): if array1[i] > 0: ans += p ans %= MOD p *= 2 p %= MOD print(ans) if __name__ == "__main__": main()