Submission #857550

#TimeUsernameProblemLanguageResultExecution timeMemory
857550Mohamed_Kachef06Beautiful row (IZhO12_beauty)C++17
0 / 100
3056 ms164808 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define A first #define B second int n , a[20] , dp[20][1<<20] , co[20][20]; int fact(int i , int b){ int x = a[i]; int ans =0 ; while(x > 0){ if (x%b == 1) ans++; x/=b; } return ans; } void pre(){ for (int i = 0 ; i < n ; i++) { for (int j = 0 ; j < n ; j++){ int a = fact(i ,2), b = fact(i , 3) , c = fact(j ,2 ) , d= fact(j , 3); if (a == c || b == d) co[i][j] = 1; } } } int brute(int last , int mask){ int y = __builtin_popcountll(mask); if (y == n) return 1; if (~dp[last][mask]) return dp[last][mask]; int ans = 0 ; for (int i = 0 ; i < n ; i++){ if (!(mask & (1<<i))){ int x = brute(i , (mask | (1<<i))); if (y == 0 || co[last][i]) ans += x; } } return dp[last][mask] = ans; } signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 0 ; i < n ; i++) cin >> a[i]; memset(dp , -1 , sizeof dp); pre(); cout << brute(0 , 0); }
#Verdict Execution timeMemoryGrader output
Fetching results...