Advertisement
anechka_ne_plach

Untitled

Nov 6th, 2021
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.57 KB | None | 0 0
  1. #include <array>
  2. #include <numeric>
  3. #include <algorithm>
  4. #include <cmath>
  5. #include <cstring>
  6. #include <iostream>
  7.  
  8. // constexpr void print() {
  9. //     std::cerr << std::endl;
  10. // }
  11.  
  12. // template<class... Args>
  13. // constexpr void print(int value, Args... args) {
  14. //     std::cerr << value << " ";
  15. //     print(args...);
  16. // }
  17.  
  18.  
  19. constexpr bool is_used(int elem) {
  20.     return false;
  21. }
  22.  
  23. template<class... Args>
  24. constexpr bool is_used(int elem, int value, Args... args) {
  25.     if (value == elem) {
  26.         return true;
  27.     }
  28.     return is_used(elem, args...);
  29. }
  30.  
  31.  
  32. template<int N, class matrix, class... Args>
  33. constexpr int res(const matrix& a, int i, int sign, int prod, Args... used) {
  34.     if (i == N) {
  35.         return sign * prod;
  36.     }
  37.     int sum = 0;
  38.     for (int j = 0; j < N; ++j) {
  39.         // if (!is_used(j, used...)) {
  40.         if (j == i) {
  41.             int new_sign = sign;
  42.             int new_prod = prod * a[i][j];
  43.             sum += res<N>(a, i + 1, new_sign, new_prod, j, used...);
  44.         }
  45.     }
  46.     return sum;
  47. }
  48.  
  49. template<int N>
  50. constexpr int determinant(const std::array<std::array<int, N>, N>& a) {
  51.     // int det = 0;
  52.     // std::array<int, 3> a = {0, 1, 2};
  53.     // int perm[N];
  54.     // std::iota(perm, perm + N, 0);
  55.     // int sign = 1;
  56.     // do {
  57.     //     int det_perm = sign;
  58.     //     for (int i = 0; i < N; ++i) {
  59.     //         det_perm *= a[i][perm[i]];
  60.     //     }
  61.     //     det += det_perm;
  62.     //     sign *= -1;
  63.     // } while (std::next_permutation(perm, perm + N));
  64.     // return det;
  65.     return res<N>(a, 0, 1, 1);
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement