Submission #1294692

#TimeUsernameProblemLanguageResultExecution timeMemory
1294692simona1230Ancient Machine (JOI21_ancient_machine)C++20
97 / 100
42 ms7160 KiB
#include "Anna.h"
#include <bits/stdc++.h>

namespace
{

const int len=14,b=10;
long long dp[64][2];
std::vector<int> c;
std::vector<int> h,v,a;
std::map< std::vector<int>, std::vector<int> > mp1,mp2;
int num;

void rec(int i)
{
    if(i==len)
    {
        h.clear();
        for(int j=0; j<b; j++)
            if(num&(1<<j))h.push_back(1);
            else h.push_back(0);
        mp1[c]=h;
        mp2[h]=c;
        num++;
        return;
    }
    if(i==0||c[c.size()-1]==0)
    {
        c.push_back(1);
        rec(i+1);
        c.pop_back();
    }

    c.push_back(0);
    rec(i+1);
    c.pop_back();
}

}

void Anna(int N, std::vector<char> S)
{
    int f=-1;
    for(int i=0; i<N; i++)
    {
        if(f==-1&&S[i]=='X')
        {
            f=i;

        }

        if(f!=-1&&S[i]=='Z')
        {
            v.push_back(1);
            if(v.size()>1&&v[v.size()-2]==1)v[v.size()-2]=0;
        }
        else v.push_back(0);
    }
    f++;
    for(int j=0;j<17;j++)
        if((1<<j)&f)a.push_back(1);
        else a.push_back(0);

    while(v.size()%len!=0)v.push_back(0);

    rec(0);
    for(int i=0;i<v.size();i+=len)
    {
        h.clear();
        for(int j=0;j<len;j++)
            h.push_back(v[i+j]);
        h=mp1[h];
        for(int j=0;j<b;j++)
            a.push_back(h[j]);
    }

    for(int i=0;i<a.size();i++)
    {
        Send(a[i]);
        //std::cout<<a[i]<<" ";
    }
    //std::cout<<std::endl;

    /*dp[1][0]=dp[1][1]=1;
    for(int i=2; i<=40; i++)
    {
        dp[i][0]=dp[i-1][1]+dp[i-1][0];
        dp[i][1]=dp[i-1][0];


        int p=0;
        while((1<<p)+1<=dp[i][0]+dp[i][1])p++;
        double g=(double)(p)/(double)(i);
        std::cout<<i<<" >>>>>> "<<p<<std::endl;
        std::cout<<g<<std::endl;
        if(g<=0.7)
        {

        }
    }*/
}
#include "Bruno.h"
#include <bits/stdc++.h>

namespace
{

const int len1=14,b1=10;
long long dp1[64][2];
std::vector<int> c1;
std::vector<int> h1,v1,a1;
std::map< std::vector<int>, std::vector<int> > mp11,mp21;
int num1;

void rec1(int i)
{
    if(i==len1)
    {
        h1.clear();
        for(int j=0; j<b1; j++)
            if(num1&(1<<j))h1.push_back(1);
            else h1.push_back(0);
        mp11[c1]=h1;
        mp21[h1]=c1;
        /*for(int j=0;j<b1;j++)
            std::cout<<h1[j]<<" ";
        std::cout<<std::endl;
        for(int j=0;j<len1;j++)
            std::cout<<c1[j]<<" ";
        std::cout<<std::endl;*/
        num1++;
        return;
    }
    if(i==0||c1[c1.size()-1]==0)
    {
        c1.push_back(1);
        rec1(i+1);
        c1.pop_back();
    }

    c1.push_back(0);
    rec1(i+1);
    c1.pop_back();
}

}  // namespace

void Bruno(int N, int L, std::vector<int> A)
{

    rec1(0);
    int x=0;
    for(int i=0; i<17; i++)
        if(A[i])x+=(1<<i);

    if(x==0)
    {
        for(int i=0; i<N; i++)
            Remove(i);
        return;
    }
    x--;

    for(int i=17; i<A.size(); i+=b1)
    {
        c1.clear();
        for(int j=0; j<b1; j++)
            c1.push_back(A[i+j]);
        c1=mp21[c1];
        /*for(int j=0;j<len1;j++)
            std::cout<<c1[j]<<" ";
        std::cout<<std::endl;*/
        for(int j=0; j<len1; j++)
            v1.push_back(c1[j]);
    }
    v1[x]=1;
    /*std::cout<<x<<std::endl;
    for(int i=0;i<v1.size();i++)
        std::cout<<v1[i]<<" ";
    std::cout<<std::endl;*/


    int f=-1,l=-1;
    for(int i=0;i<v1.size();i++)
    {
        if(v1[i])
        {
            for(int j=i-1;j>l;j--)
                Remove(j);
            if(f==-1)f=i;
            else Remove(i);

            l=i;
        }
    }

    if(f==-1)
    {
        for(int i=0;i<N;i++)
            Remove(i);
    }
    else
    {
        Remove(f);
        for(int i=l+1;i<N;i++)
            Remove(i);
    }
}

/*
18
Y X Y Z X Z X X Z Z Y Y Z Y Y Z X X
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...