Submission #1217917


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

const int BASE=1e9+7;

long long N,f[100][2][2][2];

long long dp(int bit, int carry, int isA, int isB)
{
    if (bit==63)
    {
        if (carry==0) return (!isA && !isB);
        else
        {
            if (N>>bit&1) return (!isA && !isB);
            else return 0;
        }
    }
    if (f[bit][carry][isA][isB]==-1)
    {
        f[bit][carry][isA][isB]=0;
        bool nxA,nxB;
        int bitA,bitB,ncarry;
        // bit u^v= 0 && u+v=0
        bitA=carry;
        bitB=0;
        ncarry=0;
        if (N>>bit&1)
        {
            if (bitA) nxA=isA;
            else nxA=0;
            nxB=0;
        }
        else
        {
            if (bitA) nxA=1;
            else nxA=isA;
            nxB=isB;
        }
        f[bit][carry][isA][isB]+=dp(bit+1,ncarry,nxA,nxB);
        f[bit][carry][isA][isB]%=BASE;
        // bit u^v= 1
        bitA=(carry+1)%2;
        ncarry=(carry+1)/2;
        bitB=1;
        if (N>>bit&1)
        {
            if (bitA) nxA=isA;
            else nxA=0;
            nxB=isB;
        }
        else
        {
            if (bitA) nxA=1;
            else nxA=isA;
            nxB=1;
        }
        f[bit][carry][isA][isB]+=dp(bit+1,ncarry,nxA,nxB);
        f[bit][carry][isA][isB]%=BASE;
        // bit u^v=0 && u+v=1
        bitA=carry;
        ncarry=1;
        bitB=0;
        if (N>>bit&1)
        {
            if (bitA) nxA=isA;
            else nxA=0;
            nxB=0;
        }
        else
        {
            if (bitA) nxA=1;
            else nxA=isA;
            nxB=isB;
        }
        f[bit][carry][isA][isB]+=dp(bit+1,ncarry,nxA,nxB);
        f[bit][carry][isA][isB]%=BASE;
    }
    return f[bit][carry][isA][isB];
}

int main()
{
    cin >> N;
    memset(f,-1,sizeof f);
    cout << dp(0,0,0,0);
}

Submission Info

Submission Time
Task D - Xor Sum
User zkn99
Language C++14 (GCC 5.4.1)
Score 600
Code Size 1911 Byte
Status AC
Exec Time 1 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 1 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