제출 #1334553

#제출 시각아이디문제언어결과실행 시간메모리
1334553QuocSensei질문 (CEOI14_question_grader)C++20
100 / 100
713 ms39788 KiB
#include <bits/stdc++.h>

#define ll long long 
#define el cout << endl
#define bit(mask, i) (((mask) >> (i)) & 1)
#define BIT(n) (1ll << (n))

using namespace std;

namespace SUBTASK_1
{
    const int maxlog = 9;

    namespace personA
    {
        int encode(int N, int x, int y)
        {
            for (int i = 0; i <= maxlog; i++)
                if (bit(x, i) ^ bit(y, i))
                    return i * 2 + bit(x, i) + 1;
            return -1;
        }
    }
    
    namespace personB
    {
        int decode(int N, int q, int h)
        {
            h--;
            return bit(q, h / 2) == h % 2;
        }
    }
}
namespace SUBTASK_2
{
    const int maxlog = 9;

    namespace personA
    {
        int encode(int N, int x, int y)
        {
            for (int i = 0; i <= maxlog; i++)
                if (bit(x, i) ^ bit(y, i))
                    return bit(y, i) * (maxlog + 1) + i + 1;
            return -1;
        }
    }

    namespace personB
    {
        int decode(int N, int q, int h)
        {
            h--;
            if (h <= maxlog)
                return bit(q, h);
            return !bit(q, h - maxlog);
        }
    }
}
namespace SUBTASK_AC
{
    const int maxlog = 12;

    struct myStruct
    {
        vector<int> f;

        myStruct()
        {
            for (int mask = 0; mask < BIT(maxlog); mask++)
            {
                if (__builtin_popcount(mask) != 6)
                    continue;
                f.push_back(mask);
            }
        }
    };

    myStruct T;

    namespace personA
    {
        int encode(int N, int x, int y)
        {
            x = T.f[x];
            y = T.f[y];
            for (int i = 0; i < maxlog; i++)
                if (bit(x, i) == 1 && bit(y, i) == 0)
                    return i + 1;
            return -1;
        }
    }

    namespace personB
    {
        int decode(int N, int q, int h)
        {
            h--;
            q = T.f[q];
            return bit(q, h);
        }
    }
}

int encode(int N, int x, int y)
{
    return SUBTASK_AC::personA::encode(N, x, y);
}
int decode(int N, int q, int h)
{
    return SUBTASK_AC::personB::decode(N, q, h);
}
#include <bits/stdc++.h>

#define ll long long 
#define el cout << endl
#define bit(mask, i) (((mask) >> (i)) & 1)
#define BIT(n) (1ll << (n))

using namespace std;

namespace SUBTASK_1
{
    const int maxlog = 9;

    namespace personA
    {
        int encode(int N, int x, int y)
        {
            for (int i = 0; i <= maxlog; i++)
                if (bit(x, i) ^ bit(y, i))
                    return i * 2 + bit(x, i) + 1;
            return -1;
        }
    }
    
    namespace personB
    {
        int decode(int N, int q, int h)
        {
            h--;
            return bit(q, h / 2) == h % 2;
        }
    }
}
namespace SUBTASK_2
{
    const int maxlog = 9;

    namespace personA
    {
        int encode(int N, int x, int y)
        {
            for (int i = 0; i <= maxlog; i++)
                if (bit(x, i) ^ bit(y, i))
                    return bit(y, i) * (maxlog + 1) + i + 1;
            return -1;
        }
    }

    namespace personB
    {
        int decode(int N, int q, int h)
        {
            h--;
            if (h <= maxlog)
                return bit(q, h);
            return !bit(q, h - maxlog);
        }
    }
}
namespace SUBTASK_AC
{
    const int maxlog = 12;

    struct myStruct
    {
        vector<int> f;

        myStruct()
        {
            for (int mask = 0; mask < BIT(maxlog); mask++)
            {
                if (__builtin_popcount(mask) != 6)
                    continue;
                f.push_back(mask);
            }
        }
    };

    myStruct T;

    namespace personA
    {
        int encode(int N, int x, int y)
        {
            x = T.f[x];
            y = T.f[y];
            for (int i = 0; i < maxlog; i++)
                if (bit(x, i) == 1 && bit(y, i) == 0)
                    return i + 1;
            return -1;
        }
    }

    namespace personB
    {
        int decode(int N, int q, int h)
        {
            h--;
            q = T.f[q];
            return bit(q, h);
        }
    }
}

int encode(int N, int x, int y)
{
    return SUBTASK_AC::personA::encode(N, x, y);
}
int decode(int N, int q, int h)
{
    return SUBTASK_AC::personB::decode(N, q, h);
}
#Verdict Execution timeMemoryGrader output
Fetching results...