|
|
|
|
@ -32,8 +32,8 @@ std::vector<int> unrank_combination(long n, long k, long long idx) {
|
|
|
|
|
std::vector<int> comb;
|
|
|
|
|
comb.reserve(k);
|
|
|
|
|
long start = 1;
|
|
|
|
|
for (long i = 0; i < k; ++i) {
|
|
|
|
|
for (long v = start; v <= n; ++v) {
|
|
|
|
|
for (long i = 0; i < k; i++) {
|
|
|
|
|
for (long v = start; v <= n; v++) {
|
|
|
|
|
long long count = binom(n - v, k - i - 1);
|
|
|
|
|
if (idx < count) {
|
|
|
|
|
comb.push_back((int)v);
|
|
|
|
|
@ -57,7 +57,7 @@ std::vector<long long> sample_indices(long long total, long c) {
|
|
|
|
|
std::mt19937 gen(rd());
|
|
|
|
|
std::uniform_int_distribution<long long> dist(0, total - 1);
|
|
|
|
|
|
|
|
|
|
for (long i = 0; i < c; ++i) {
|
|
|
|
|
for (long i = 0; i < c; i++) {
|
|
|
|
|
idx.push_back(dist(gen));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -75,7 +75,7 @@ Clause decode_clause(long n, long k, long long idx) {
|
|
|
|
|
Clause cl;
|
|
|
|
|
cl.reserve(k);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < k; ++i) {
|
|
|
|
|
for (int i = 0; i < k; i++) {
|
|
|
|
|
int lit = comb[i];
|
|
|
|
|
cl.push_back((mask & (1 << i)) ? lit : -lit);
|
|
|
|
|
}
|
|
|
|
|
@ -92,7 +92,7 @@ std::vector<Clause> build_clauses_parallel(
|
|
|
|
|
std::vector<Clause> result(indices.size());
|
|
|
|
|
|
|
|
|
|
#pragma omp parallel for schedule(dynamic)
|
|
|
|
|
for (long i = 0; i < (long)indices.size(); ++i) {
|
|
|
|
|
for (long i = 0; i < (long)indices.size(); i++) {
|
|
|
|
|
result[i] = decode_clause(n, k, indices[i]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|