Untitled

 avatar
unknown
plain_text
16 days ago
878 B
2
Indexable
int n, a[20], b[20], dis_a[20], dis_b[20];
ll dp[mu2(20)];
int tmp[20];
 
void nhap()
{
    cin >> n;
}
 
void solve()
{
    nhap();
    FOR(i, 0, n)
    {
        cin >> a[i];
        dis_a[a[i] - 1] = i;
    }
    FOR(i, 0, n)
    {
        cin >> b[i];
        dis_b[b[i] - 1] = i;
    }
    mem(tmp, 0);
    FOR(i, 0, n)
    {
        FOR(j, 0, n)
        {
            if (i != j && dis_a[i] < dis_a[j] && dis_b[i] < dis_b[j])
            {
                tmp[j] |= mu2(i);
            }
        }
    }
    dp[0] = 1;
    FOR(mask, 0, mu2(n))
    {
        FOR(x, 0, n)
        {
            if((mask & mu2(x)) == 0)
            {
                if((mask & tmp[x]) == tmp[x])
                {
                    dp[mask | mu2(x)] += dp[mask];
                }
            }
        }
    }
    cout << dp[mu2(n) - 1];
}
Leave a Comment