Submission #1036529

#TimeUsernameProblemLanguageResultExecution timeMemory
1036529andrei_c1Present (RMI21_present)C++17
29 / 100
323 ms14300 KiB
/**
* user:  chertes-cab
* fname: Andrei
* lname: Chertes
* task:  Present
* score: 29.0
* date:  2021-12-16 08:14:57.934784
*/
#include <bits/stdc++.h>

using namespace std;

const int maxlen = 25;

bool vis[maxlen + 1];
int st[maxlen + 1];
int mask;
vector<int> v;

bool valid(int p) {
    if(p == 1) {
        return 1;
    }

    for(int i = 1; i < p; i++) {
        if(!vis[__gcd(st[i], st[p])]) {
            return 0;
        }
    }

    return 1;
}

void bkt(int p) {
    for(int i = st[p - 1] + 1; i <= maxlen; i++) {
        st[p] = i;
        vis[i] = 1;
        mask += (1 << (i - 1));


        if(p <= maxlen && valid(p)) {
            v.push_back(mask);
            bkt(p + 1);
        }

        vis[i] = 0;
        mask -= (1 << (i - 1));
    }
}

int T;

int main() {
    ios_base :: sync_with_stdio(false); cin.tie(0); cout.tie(0);

    bkt(1);

    sort(v.begin(), v.end());

    cin >> T;
    while(T--) {
        int K;
        cin >> K;

        if(K == 0) {
            cout << "0\n";
            continue;
        }

        int cnt = 0;
        for(int i = 0; i < maxlen; i++) {
            if(v[K - 1] & (1 << i)) {
                cnt++;
            }
        }

        cout << cnt << " ";
        for(int i = 0; i < maxlen; i++) {
            if(v[K - 1] & (1 << i)) {
                cout << (i + 1) << " ";
            }
        }
        cout << '\n';
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...