Submission #1363375

#TimeUsernameProblemLanguageResultExecution timeMemory
1363375solution6312Broken Device (JOI17_broken_device)C++17
0 / 100
0 ms344 KiB
#include "Annalib.h"
#include <iostream>
#include <cassert>
#include <chrono>
#include <random>
using namespace std;
using ll=long long;

void Set(int pos, int bit);
namespace encode
{
    mt19937_64 rng(813045676191523084);
    ll FR; bool gen=0;
    int work[150], b3[38];
    void Anna(int N, ll X, int K, int P[])
    {
        if (!gen)
        {
            FR=(rng()&((1ll<<60)-1)); cerr<<FR<<endl;
            gen=1;
        }
        X^=FR;
        //cerr<<X<<' ';
        for (int i=0; i<150; i++) work[i]=1;
        for (int i=0; i<K; i++) work[P[i]]=0;
        for (int i=0; i<38; i++)
        {
            b3[i]=X%3;
            X/=3;
        }
        int cnt=0;
        for (int i=0; i<150; i+=2)
        {
            bool f=1;
            if (cnt==38) f=0;
            else if (b3[cnt]==0 && !work[i+1]) f=0;
            else if (b3[cnt]==1 && !work[i]) f=0;
            else if (b3[cnt]==2 && (!work[i] || !work[i+1])) f=0;
            if (f)
            {
                if (b3[cnt]==0)
                {
                    Set(i, 0);
                    Set(i+1, 1);
                }
                else if (b3[cnt]==1)
                {
                    Set(i, 1);
                    Set(i+1, 0);
                }
                else
                {
                    Set(i, 1);
                    Set(i+1, 1);
                }
                cnt++;
            }
            else
            {
                Set(i, 0);
                Set(i+1, 0);
            }
        }
        assert(cnt==38);
    }
}
void Anna(int N, ll X, int K, int P[]) { encode::Anna(N, X, K, P); }
#include "Brunolib.h"
#include <iostream>
#include <cassert>
#include <chrono>
#include <random>
using namespace std;
using ll=long long;

namespace decode
{
    mt19937_64 rng(813045676191523084);
    ll FR, p3[38]; bool gen=0;
    ll Bruno(int N, int A[])
    {
        if (!gen)
        {
            FR=(rng()&((1ll<<60)-1)); cerr<<FR<<endl;
            p3[0]=1;
            for (int i=1; i<38; i++) p3[i]=p3[i-1]*3;
            gen=1;
        }
        int cnt=0; ll ans=0;
        for (int i=0; i<150; i+=2)
        {
            if (!A[i] && !A[i+1]) continue;
            assert(cnt<38);
            if (A[i] && !A[i+1]) ans+=p3[cnt];
            else if (A[i] && A[i+1]) ans+=p3[cnt]*2;
            cnt++;
        }
        //cerr<<ans<<endl;
        return ans^FR;
    }
}
ll Bruno(int N, int A[]) { return decode::Bruno(N, A); }
#Result Execution timeMemoryGrader output
Fetching results...