Submission #1155121

#TimeUsernameProblemLanguageResultExecution timeMemory
1155121mutseCloud Computing (CEOI18_clo)C++20
0 / 100
0 ms528 KiB
#include <bits/stdc++.h>

#define ll long long

using namespace std;

int n;
vector<int> ans, now;
map<int, bool> ansDict;

void calculate(){
    int cnt = 0;
    for(auto i: now) cnt += i - 1;
    if(!ansDict[cnt]){
        ans.push_back(cnt);
        ansDict[cnt] = 1;
    }
}

// n의 소인수 중 divisor보다 크거나 같은 소인수를 찾는 dfs
void dfs(int n, int divisor){
    // cout << "called " << n << ' ' << divisor << '\n';
    if(n == 1){
        // for(auto j: now) cout << j << ' ';
        // cout << '\n';
        calculate();
        return;
    }
    vector<int> divisors;
    for(int i = 1; i <= sqrt(n); ++i){
        if(n % i == 0){
            if(i * i == n) divisors.push_back(i);
            else{
                divisors.push_back(i);
                divisors.push_back(n / i);
            }
        }
    }
    sort(divisors.begin(), divisors.end());
    // for(auto i: divisors) cout << i << ' ';
    // cout << '\n';
    for(auto i = divisors.begin(); i != divisors.end(); ++i){
        if(*i < divisor) continue;
        now.push_back(*i);
        dfs(n / *i, *i);
        now.pop_back();
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n;
    dfs(n, 2);
    sort(ans.begin(), ans.end());
    cout << ans.size() << '\n';
    for(auto i: ans){
        cout << i << ' ';
    }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...