結果
| 問題 |
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()