Submission #1294679

#TimeUsernameProblemLanguageResultExecution timeMemory
1294679simona1230Ancient Machine (JOI21_ancient_machine)C++20
0 / 100
34 ms6628 KiB
#include "Anna.h"
#include <bits/stdc++.h>

namespace
{

const int len=4,b=3;
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;
            for(int j=0;j<17;j++)
                if((1<<j)&i)a.push_back(1);
                else a.push_back(0);
        }

        if(f!=-1&&S[i]=='Z')
        {
            v.push_back(1);
            if(v.size()>1&&v[v.size()-2]==1)v[v.size()-1]=0;
        }
        else v.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<=50; 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;
        if(g<=0.7)
        {
            std::cout<<g<<std::endl;
        }
    }*/
}
#include "Bruno.h"
#include <bits/stdc++.h>

namespace
{

const int len1=4,b1=3;
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)
{
    if(A.size()%b1==0)
    {
        for(int i=0; i<N; i++)
            Remove(i);
        return;
    }
    rec1(0);
    int x=0;
    for(int i=0; i<17; i++)
        if(A[i])x+=(1<<i);

    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]);
    }
    /*for(int i=0;i<v1.size();i++)
        std::cout<<v1[i]<<" ";
    std::cout<<std::endl;*/

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

            l=i;
        }
    }
    for(int i=0; i<x; i++)
        Remove(i);
    Remove(x);
    for(int i=l+1; i<N; i++)
        Remove(i);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...