Submission #66614017
Source Code Expand
#include <stdio.h> #include <inttypes.h> #define MOD_BY 998244353 int add(int a, int b) { return a + b - MOD_BY * (a + b >= MOD_BY); } int mul(int a, int b) { return (int)((long long)a * b % MOD_BY); } int T, tc; uint64_t N; int K; struct res_s { int sum, num; } memo[64][64][2]; int memo_gen[64][64][2]; struct res_s calc(int pos, int left, int sati) { const int bit = (N >> pos) & 1; struct res_s ans = {0, 0}; if (pos < 0) return (struct res_s){0, left == 0}; if (memo_gen[pos][left][sati] == tc) return memo[pos][left][sati]; /* 0 */ { struct res_s delta = calc(pos - 1, left, sati && bit == 0); ans.sum = add(ans.sum, delta.sum); ans.num = add(ans.num, delta.num); } /* 1 */ if (left > 0 && (!sati || bit != 0)) { struct res_s delta = calc(pos - 1, left - 1, sati); ans.sum = add(ans.sum, add(delta.sum, mul((1LL << pos) % MOD_BY, delta.num))); ans.num = add(ans.num, delta.num); } memo_gen[pos][left][sati] = tc; memo[pos][left][sati] = ans; return ans; } int main(void) { int i; if (scanf("%d", &T) != 1) return 1; for (tc = 1; tc <= T; tc++) { if (scanf("%" SCNu64 "%d", &N, &K) != 2) return 1; printf("%d\n", calc(63, K, 1).sum); } return 0; }
Submission Info
Submission Time | |
---|---|
Task | E - Popcount Sum 3 |
User | mikecat |
Language | C (gcc 12.2.0) |
Score | 450 |
Code Size | 1250 Byte |
Status | AC |
Exec Time | 3 ms |
Memory | 1828 KiB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 450 / 450 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | example_00.txt |
All | example_00.txt, hand_00.txt, hand_01.txt, hand_02.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, random_29.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
example_00.txt | AC | 1 ms | 1732 KiB |
hand_00.txt | AC | 2 ms | 1816 KiB |
hand_01.txt | AC | 0 ms | 1808 KiB |
hand_02.txt | AC | 0 ms | 1816 KiB |
random_00.txt | AC | 2 ms | 1816 KiB |
random_01.txt | AC | 2 ms | 1800 KiB |
random_02.txt | AC | 3 ms | 1816 KiB |
random_03.txt | AC | 2 ms | 1820 KiB |
random_04.txt | AC | 2 ms | 1808 KiB |
random_05.txt | AC | 1 ms | 1720 KiB |
random_06.txt | AC | 2 ms | 1656 KiB |
random_07.txt | AC | 1 ms | 1816 KiB |
random_08.txt | AC | 1 ms | 1800 KiB |
random_09.txt | AC | 1 ms | 1796 KiB |
random_10.txt | AC | 1 ms | 1712 KiB |
random_11.txt | AC | 1 ms | 1800 KiB |
random_12.txt | AC | 1 ms | 1736 KiB |
random_13.txt | AC | 1 ms | 1816 KiB |
random_14.txt | AC | 1 ms | 1828 KiB |
random_15.txt | AC | 1 ms | 1696 KiB |
random_16.txt | AC | 1 ms | 1696 KiB |
random_17.txt | AC | 1 ms | 1664 KiB |
random_18.txt | AC | 1 ms | 1736 KiB |
random_19.txt | AC | 1 ms | 1800 KiB |
random_20.txt | AC | 1 ms | 1804 KiB |
random_21.txt | AC | 2 ms | 1716 KiB |
random_22.txt | AC | 1 ms | 1692 KiB |
random_23.txt | AC | 2 ms | 1812 KiB |
random_24.txt | AC | 1 ms | 1736 KiB |
random_25.txt | AC | 1 ms | 1820 KiB |
random_26.txt | AC | 1 ms | 1712 KiB |
random_27.txt | AC | 1 ms | 1816 KiB |
random_28.txt | AC | 1 ms | 1688 KiB |
random_29.txt | AC | 1 ms | 1688 KiB |