cp-library-cpp

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub suisen-cp/cp-library-cpp

:heavy_check_mark: Partition Number
(library/sequence/partition_number.hpp)

Partition Number

partition_number

Verified with

Code

#ifndef SUISEN_PARTITON_NUMBER
#define SUISEN_PARTITON_NUMBER

#include <vector>

namespace suisen {
    template <typename FPSType>
    std::vector<typename FPSType::value_type> partition_number(int n) {
        FPSType inv(n + 1);
        inv[0] = 1;
        for (int i = 1, k = 1; k <= n; k += 3 * i + 1, i++) {
            if (i & 1) --inv[k];
            else ++inv[k];
        }
        for (int i = 1, k = 2; k <= n; k += 3 * i + 2, i++) {
            if (i & 1) --inv[k];
            else ++inv[k];
        }
        inv.inv_inplace(n + 1), inv.resize(n + 1);
        return inv;
    }
} // namespace suisen

#endif // SUISEN_PARTITON_NUMBER
#line 1 "library/sequence/partition_number.hpp"



#include <vector>

namespace suisen {
    template <typename FPSType>
    std::vector<typename FPSType::value_type> partition_number(int n) {
        FPSType inv(n + 1);
        inv[0] = 1;
        for (int i = 1, k = 1; k <= n; k += 3 * i + 1, i++) {
            if (i & 1) --inv[k];
            else ++inv[k];
        }
        for (int i = 1, k = 2; k <= n; k += 3 * i + 2, i++) {
            if (i & 1) --inv[k];
            else ++inv[k];
        }
        inv.inv_inplace(n + 1), inv.resize(n + 1);
        return inv;
    }
} // namespace suisen
Back to top page