結果
問題 | No.2206 Popcount Sum 2 |
ユーザー | Shirotsume |
提出日時 | 2023-02-03 22:56:51 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 3,191 ms / 4,000 ms |
コード長 | 2,030 bytes |
コンパイル時間 | 685 ms |
コンパイル使用メモリ | 81,656 KB |
実行使用メモリ | 84,892 KB |
最終ジャッジ日時 | 2024-07-02 21:02:48 |
合計ジャッジ時間 | 52,212 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1,325 ms
82,156 KB |
testcase_01 | AC | 1,333 ms
82,560 KB |
testcase_02 | AC | 1,370 ms
83,000 KB |
testcase_03 | AC | 1,376 ms
83,328 KB |
testcase_04 | AC | 1,371 ms
83,328 KB |
testcase_05 | AC | 3,106 ms
83,924 KB |
testcase_06 | AC | 3,110 ms
84,312 KB |
testcase_07 | AC | 3,191 ms
84,572 KB |
testcase_08 | AC | 3,183 ms
84,312 KB |
testcase_09 | AC | 3,153 ms
84,188 KB |
testcase_10 | AC | 2,613 ms
84,280 KB |
testcase_11 | AC | 2,643 ms
84,256 KB |
testcase_12 | AC | 2,609 ms
84,892 KB |
testcase_13 | AC | 2,619 ms
84,256 KB |
testcase_14 | AC | 2,600 ms
84,384 KB |
testcase_15 | AC | 2,598 ms
84,256 KB |
testcase_16 | AC | 3,123 ms
84,460 KB |
testcase_17 | AC | 3,119 ms
84,404 KB |
testcase_18 | AC | 3,107 ms
84,156 KB |
ソースコード
import sys from collections import deque, Counter input = lambda: sys.stdin.readline().rstrip() ii = lambda: int(input()) mi = lambda: map(int, input().split()) li = lambda: list(mi()) inf = 2 ** 63 - 1 mod = 998244353 class Combinatorics(): def __init__(self, mod, maxi): self.mod = mod self.maxi = maxi self.facs = [1] * (maxi + 1) self.factinvs = [1] * (maxi + 1) self.invs = [1] * (maxi + 1) for i in range(2, self.maxi + 1): self.facs[i] = ((self.facs[i-1] * i) % self.mod) self.invs[i] = (-self.invs[self.mod % i] * (self.mod // i)) % self.mod self.factinvs[i] = (self.factinvs[i-1] * self.invs[i]) % self.mod def choose(self, n, k) -> int: if k < 0 or k > n: return 0 if k == 0 or k == n: return 1 k = min(k, n - k) return (((self.facs[n] * self.factinvs[k]) % self.mod) * self.factinvs[n-k]) % self.mod def perm(self, n, k) -> int: return (self.choose(n, k) * self.facs[k]) % self.mod def homop(self, n, k) -> int: if n == k == 0: return 1 return self.choose(n + k - 1, k) t = 500 maxi = 2 * 10 ** 5 C = Combinatorics(mod, maxi) pre = [[0] * (maxi // t + 1) for _ in range(maxi // t + 1)] for i in range(0, maxi + 1, t): for j in range(0, maxi + 1, t): if j // t > 0: pre[i // t][j // t] += pre[i // t][j // t - 1] for k in range(j - t + 1, j + 1): pre[i // t][j // t] += C.choose(i, k) else: pre[i//t][j//t] = 1 def Csum(n, k): nnow = (n // t) * t know = (k // t) * t now = pre[n // t][k // t] for i in range(n - nnow): now = 2 * now - C.choose(nnow + i, know) now %= mod for i in range(k - know): now = now + C.choose(n, know + i + 1) now %= mod return now def solve(): n, m = mi() ans = Csum(n - 1, m - 1) * (pow(2, n, mod) - 1) ans %= mod print(ans) for _ in range(ii()): solve()