Submission #7077605


Source Code Expand

#include <bits/stdc++.h>
using i64 = long long;

constexpr i64 mod = 1000000007;

i64 n;
i64 dp[61][2][2][2];

// i桁以下の場合の数, N以下が確定しているか, i-th bitがk, i-th bitがmarkedか
i64 rec(int i, int j, int k, int l) {
    if (dp[i][j][k][l] >= 0) return dp[i][j][k][l];
    i64 ret = 0;
    if (i == 0) {
        if (!j && (n & 1) == 0 && k) ret = 0;
        else if (l && k) ret = 0;
        else ret = 1;
        return dp[i][j][k][l] = ret;
    }
    // 1, marked
    if ((j || ((1ll << (i - 1)) & n)) && (k || l)) {
        ret = rec(i - 1, j, 1, 1);
    }
    // 1, not marked
    if ((j || ((1ll << (i - 1)) & n)) && !(k && l)) {
        ret = (ret + rec(i - 1, j, 1, 0)) % mod;
    }
    // 0, marked
    if (k || l) {
        ret = (ret + rec(i - 1, ((1ll << (i - 1)) & n) || j, 0, 1)) % mod;
    }
    // 0, not marked
    if (!(k && l)) {
        ret = (ret + rec(i - 1, ((1ll << (i - 1)) & n) || j, 0, 0)) % mod;
    }
    return dp[i][j][k][l] = ret;
}

int main() {
    std::cin >> n;
    for (auto &a : dp) for (auto &b : a) for (auto &c : b) for (auto &e : c) e = -1;
    std::cout << rec(60, 0, 0, 0) << std::endl;

    return 0;
}

Submission Info

Submission Time
Task D - Xor Sum
User CharlotteL
Language C++14 (GCC 5.4.1)
Score 600
Code Size 1221 Byte
Status AC
Exec Time 2 ms
Memory 256 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 19
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_max_01.txt, subtask_1_rand_01.txt, subtask_1_rand_02.txt, subtask_1_rand_03.txt, subtask_1_rand_04.txt, subtask_1_rand_05.txt, subtask_1_small_rand_01.txt, subtask_1_small_rand_02.txt, subtask_1_small_rand_03.txt, subtask_1_small_rand_04.txt, subtask_1_small_rand_05.txt, subtask_1_specific_01.txt, subtask_1_specific_02.txt, subtask_1_specific_03.txt, subtask_1_specific_04.txt, subtask_1_specific_05.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB
subtask_1_max_01.txt AC 1 ms 256 KB
subtask_1_rand_01.txt AC 1 ms 256 KB
subtask_1_rand_02.txt AC 1 ms 256 KB
subtask_1_rand_03.txt AC 1 ms 256 KB
subtask_1_rand_04.txt AC 1 ms 256 KB
subtask_1_rand_05.txt AC 1 ms 256 KB
subtask_1_small_rand_01.txt AC 1 ms 256 KB
subtask_1_small_rand_02.txt AC 1 ms 256 KB
subtask_1_small_rand_03.txt AC 1 ms 256 KB
subtask_1_small_rand_04.txt AC 1 ms 256 KB
subtask_1_small_rand_05.txt AC 1 ms 256 KB
subtask_1_specific_01.txt AC 1 ms 256 KB
subtask_1_specific_02.txt AC 2 ms 256 KB
subtask_1_specific_03.txt AC 1 ms 256 KB
subtask_1_specific_04.txt AC 1 ms 256 KB
subtask_1_specific_05.txt AC 1 ms 256 KB