結果
問題 |
No.1952 xooooooooooor
|
ユーザー |
|
提出日時 | 2024-10-06 00:56:49 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 51 ms / 2,000 ms |
コード長 | 1,858 bytes |
コンパイル時間 | 326 ms |
コンパイル使用メモリ | 82,688 KB |
実行使用メモリ | 52,864 KB |
最終ジャッジ日時 | 2024-10-06 00:56:53 |
合計ジャッジ時間 | 2,754 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 39 |
ソースコード
## 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 else: answer = 0 # 前半 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()