Submission #338548

#TimeUsernameProblemLanguageResultExecution timeMemory
338548tengiz05Beautiful row (IZhO12_beauty)C++17
100 / 100
950 ms189292 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define FASTIO ios_base::sync_with_stdio(false); cin.tie(NULL); #define all(x) (x).begin(), (x).end() #define pb push_back #define pii pair<int, int> #define ff first #define ss second #define PI acos(-1) #define ld long double template<class T> bool ckmin(T& a, const T& b) {return a>b? a=b, true:false;} template<class T> bool ckmax(T& a, const T& b) {return a<b? a=b, true:false;} const int mod = 1e9+7, N = 23; int msb(int val){return sizeof(int)*8-__builtin_clzll(val)-1;} int a[N], n, m, k; bool iseq(int a, int b){ if(__builtin_popcount(a) == __builtin_popcount(b))return true; int c1=0, c2=0; while(a>0){ c1 += (a%3==1); a/=3; } while(b>0){ c2 += (b%3==1); b/=3; } return c1 == c2; } bool g[N][N]; int dp[1<<20][N]; void solve(int test_case){ int i, j; cin >> n; for(i=0;i<n;i++){ cin >> a[i]; } for(i=0;i<n;i++){ for(j=0;j<n;j++){ if(i == j)continue; if(iseq(a[i], a[j]))g[i][j] = 1; } } for(i=0;i<(n);i++)dp[1<<i][i] = 1; for(int mask = 1; mask < (1<<n); mask++){ for(i=0;i<n;i++){ if(mask&(1<<i)){ for(j=0;j<n;j++){ if(i != j && g[i][j] && (mask&(1<<j))){ dp[mask][i] += dp[mask^(1<<i)][j]; } } } } } int ans = 0; //for(i=1;i<(1<<n);i++){for(j=0;j<n;j++)cout << dp[i][j] << ' ';cout << '\n';} for(i=0;i<n;i++){ ans += dp[(1<<n)-1][i]; } cout << ans << '\n'; return; } signed main(){ FASTIO; #define MULTITEST 0 #if MULTITEST int _T; cin >> _T; for(int T_CASE = 1; T_CASE <= _T; T_CASE++) solve(T_CASE); #else solve(1); #endif return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...