Submission #1179867

#TimeUsernameProblemLanguageResultExecution timeMemory
1179867QuentolosseBeautiful row (IZhO12_beauty)C++20
100 / 100
1364 ms172872 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int nb1 (int nombre, int base) { int ret = 0; int m = 1; while (m <= nombre) { if ((nombre / m) % base == 1) { ret++; } m *= base; } return ret; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); int n; cin >> n; vector<int> nombres(n); for(auto &&i: nombres) { cin >> i; } vector<vector<bool>> a_cote(n, vector<bool>(n, false)); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (nb1(nombres[i], 2) == nb1(nombres[j], 2) || nb1(nombres[i], 3) == nb1(nombres[j], 3)) { a_cote[i][j] = true; a_cote[j][i] = true; } } } vector<vector<int>> dp(n, vector<int> (1 << n, 0)); for(int i = 0; i < n; i++) { dp[i][(1 << n) - 1] = 1; } for(int b = (1 << n) - 2; b > 0; b--) { for (int i = 0; i < n; i++) { for (int d = 0; d < n; d++) { if ((b >> d) % 2) continue; if (a_cote[i][d]) { dp[i][b] += dp[d][b | (1 << d)]; } } } } int reponse = 0; for (int i = 0; i < n; i++) { reponse += dp[i][1 << i]; } cout << reponse << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...