1 solutions

  • 0
    @ 2025-3-3 16:33:27

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int num[100],t,n;
    int check(int k)
    {
    for(int i=1;i<=k/3;i++) 
    {
    int flag=1;
    for(int L=1;L<=i;L++) 
    if(num[k-3*i+L]!=num[k-3*i+L+i]||num[k-3*i+L]!=num[k-3*i+L+i+i]) 
    {
    flag=0; 
    break;
    }
    if(flag) { return 0;} 
    }
    return 1;  
    }
    void dfs(int step)
    {
    if(step>n)
    {
    t++;
    return ;
    }
    for(int i=0;i<=1;i++)
    {
    num[step]=i;
    if(check(step)) 
    dfs(step+1);
    }
    }
    int main()
    {
    
    scanf("%d",&n);
    num[1]=0;
    dfs(2);
    printf("%d\n",t*2);
    
    return 0;
    }
    
    • 1

    Information

    ID
    10591
    Time
    1000ms
    Memory
    16MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By