Submission #1191762

#TimeUsernameProblemLanguageResultExecution timeMemory
1191762PetrixBeautiful row (IZhO12_beauty)C++20
0 / 100
1 ms840 KiB
#include <iostream>
using namespace std;

#define int long long

int dp[10000][11];
int v[11];

bool vf(int a,int b){
    int cnt1=0,cnt2=0;
    if(__builtin_popcount(a)==__builtin_popcount(b)) return 1;
    while(a){
        if(a%3==1) cnt1++;
        a/=3;
    }
    while(b){
        if(b%3==1) cnt2++;
        b/=3;
    }
    return (cnt1==cnt2);
}

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n,i,j,next,bit,nr,rasp=0;
    cin>>n;
    for(i=1;i<=n;i++){
        cin>>v[i];
        dp[1<<(i-1)][i]=1;
    }
    for(nr=1;nr<=n;nr++){
        for(j=1;j<=n;j++){
            for(bit=0;bit<(1<<n)-1;bit++){
                if(!(bit&(1<<(j-1))) || __builtin_popcount(bit)!=nr) continue;
                ////cout<<j<<" "<<bit<<" "<<dp[bit][j]<<"\n";
                for(next=1;next<=n;next++){
                    if((1<<(next-1)&bit) || !vf(v[j],v[next])) continue;
                    dp[(1<<(next-1)|bit)][next]+=dp[bit][j];
                }
            }
        }
    }
    for(i=1;i<=n;i++){
        rasp+=dp[(1<<n)-1][i];
    }
    cout<<rasp;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...