Submission #1153712

#TimeUsernameProblemLanguageResultExecution timeMemory
1153712duccnammAncient Machine (JOI21_ancient_machine)C++17
0 / 100
27 ms2372 KiB
#include<bits/stdc++.h>
#include "Anna.h"
using namespace std;
void Anna(int n, vector<char>s)
{
    for(int i=0;i<s.size();i++)
        if(s[i]=='X')
        {
            Send(0);
            Send(0);
        }
        else if(s[i]=='Y')
        {
            Send(0);
            Send(1);
        }
        else
        {
            Send(1);
            Send(0);
        }
    return;
}
#include<bits/stdc++.h>
#include "Bruno.h"
using namespace std;
int dp[300005],dd1,dd2,dd,trace[300005];
vector<int>vc;
void Bruno(int n,int l,vector<int>a)
{
    vector<char>s;
    for(int i=0;i<l;i+=2)
    {
        if(a[i]==0&&a[i+1]==0)
            s.push_back('X');
        if(a[i]==0&&a[i+1]==1)
            s.push_back('Y');
        if(a[i]==1&&a[i+1]==0)
            s.push_back('Z');
    }
    dp[0]=0;
    for(int i=0;i<(1<<n);i++)
    {
        for(int j=0;j<n;j++)
            if(((i>>j)&1)==0)
            {
                if(s[j]=='Y')
                {
                    dd1=dd2=-1;
                    for(int z=j+1;z<n;z++)
                        if(((i>>z)&1)==0)
                        {
                            dd1=z;
                            break;
                        }
                    for(int z=j-1;z>=0;z--)
                        if(((i>>z)&1)==0)
                        {
                            dd2=z;
                            break;
                        }
                    if(dd1!=-1&&dd2!=-1&&s[dd1]=='Z'&&s[dd2]=='X')
                    {
                        if(dp[i+(1<<j)]<dp[i]+1)
                        {
                            dp[i+(1<<j)]=dp[i]+1;
                            trace[i+(1<<j)]=j;
                        }
                    }
                    else
                    {
                        if(dp[i+(1<<j)]<dp[i])
                        {
                            dp[i+(1<<j)]=dp[i];
                            trace[i+(1<<j)]=j;
                        }
                    }
                }
                else if(dp[i+(1<<j)]<dp[i])
                {
                    dp[i+(1<<j)]=dp[i];
                    trace[i+(1<<j)]=j;
                }
            }
    }
    dd=(1<<n)-1;
    while(dd!=0)
    {
        vc.push_back(trace[dd]);
        dd-=(1<<trace[dd]);
    }
    reverse(vc.begin(),vc.end());
    for(int i=0;i<vc.size();i++)
        Remove(vc[i]);
    return;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...