Submission #1077610

#TimeUsernameProblemLanguageResultExecution timeMemory
1077610coolboy19521Beautiful row (IZhO12_beauty)C++17
0 / 100
92 ms180984 KiB
#include "bits/stdc++.h" #define ll long long #define int ll using namespace std; const int sz = 22; int vi[1 << sz][sz]; ll dp[1 << sz][sz]; int tw[sz], tr[sz]; int a[sz], n; bool matc(int i, int j) { if (tw[i] == tw[j] || tw[i] == tr[j]) return true; if (tr[i] == tw[j] || tr[i] == tr[j]) return true; return false; } ll go(int i, int bt) { if (bt == (1 << n) - 1) return 1ll; int& v = vi[bt][i]; ll& r = dp[bt][i]; if (v) return r; for (int j = 0; j < n; j ++) { int f = bt & (1 << j); if (!f && matc(i, j)) r += go(j, bt | (1 << j)); } return r; } void zero() { memset(dp, 0, sizeof(dp) / sizeof(ll)); memset(vi, 0, sizeof(vi) / sizeof(int)); } signed main() { cin >> n; for (int i = 0; i < n; i ++) cin >> a[i]; for (int i = 0; i < n; i ++) { for (int cn = a[i]; 0 < cn; cn /= 2) tw[i] += cn % 2; for (int cn = a[i]; 0 < cn; cn /= 3) tr[i] += 1 == cn % 3; //cout << a[i] << ' ' << tw[i] << ' ' << tr[i] << '\n'; } ll cn = 0; for (int i = 0; i < n; i ++) { zero(); cn += go(i, 1 << i); } cout << cn << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...