Submission #898571

#TimeUsernameProblemLanguageResultExecution timeMemory
898571n3rm1nBeautiful row (IZhO12_beauty)C++17
100 / 100
826 ms205824 KiB
#include<bits/stdc++.h> #define endl '\n' using namespace std; const long long MAXN = 25, MAXMASK = 2e6+10; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } long long n, a[MAXN], cnt2[MAXN], cnt3[MAXN]; long long cnt_bin_2(long long x) { long long cnt = 0; while(x) { if(x % 2 == 1)cnt ++; x /= 2; } return cnt; } long long cnt_bin_3(long long x) { long long cnt = 0; while(x) { if(x % 3 == 1)cnt ++; x /= 3; } return cnt; } long long dp[MAXMASK][MAXN]; void read() { cin >> n; for (long long i = 1; i <= n; ++ i) { cin >> a[i]; cnt2[i] = cnt_bin_2(a[i]); cnt3[i] = cnt_bin_3(a[i]); } } void solve() { for (long long i = 1; i <= n; ++ i) dp[(1 << (i-1))][i] = 1; for (long long mask = 1; mask < (1 << n); ++ mask) { for (long long last = 1; last <= n; ++ last) { if(((1 << (last-1)) & mask) == 0)continue; for (long long j = 1; j <= n; ++ j) { if(((1 << (j-1)) & mask) != 0)continue; if(cnt2[j] != cnt2[last] && cnt3[j] != cnt3[last])continue; long long newmask = (mask | (1 << (j-1))); dp[newmask][j] += dp[mask][last]; } } } long long ans = 0; for (long long i = 1; i <= n; ++ i) { ans += dp[(1 << n)-1][i]; } /*sort(a+1, a+n+1); for (int i = 1; i <= n; ++ i) { mp[a[i]] ++; if(a[i+1] != a[i]) { int del = mp[a[i]]; for (int j = del; j >= 1; -- j) ans /= j; } }*/ cout << ans << endl; } int main() { speed(); read(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...