제출 #1176730

#제출 시각아이디문제언어결과실행 시간메모리
1176730raphaelp아름다운 순열 (IZhO12_beauty)C++20
100 / 100
866 ms172872 KiB
#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long N;
    cin >> N;
    vector<long long> Tab(N);
    for (long long i = 0; i < N; i++)
    {
        cin >> Tab[i];
    }
    vector<long long> Bin(N), Ter(N);
    for (long long i = 0; i < N; i++)
    {
        long long x = Tab[i];
        while (x)
        {
            Bin[i] += x % 2;
            x /= 2;
        }
        x = Tab[i];
        while (x)
        {
            if (x % 3 == 1)
                Ter[i]++;
            x /= 3;
        }
    }
    vector<vector<long long>> dp(N, vector<long long>(1 << N));
    for (long long i = 0; i < N; i++)
        dp[i][(1 << i)] = 1;
    for (long long i = 0; i < (1 << N); i++)
    {
        for (long long j = 0; j < N; j++)
        {
            if (dp[j][i] == 0)
                continue;
            for (long long k = 0; k < N; k++)
            {
                if (i & (1 << k))
                    continue;
                if (Bin[j] == Bin[k] || Ter[j] == Ter[k])
                    dp[k][i | (1 << k)] += dp[j][i];
            }
        }
    }
    long long tot = 0;
    for (long long i = 0; i < N; i++)
    {
        tot += dp[i][(1 << N) - 1];
    }
    cout << tot;
}
#Verdict Execution timeMemoryGrader output
Fetching results...