Submission #1039116

#TimeUsernameProblemLanguageResultExecution timeMemory
1039116TrustfulcomicToys (CEOI18_toy)C++14
59 / 100
5037 ms712 KiB
#include<bits/stdc++.h>
using namespace std;

vector<int> primes_to(int n){
    vector<bool> is_prime(n+1, true);
    is_prime[0] = false;
    is_prime[1] = false;

    vector<int> primes;

    for (int i = 0; i<=n; i++){
        if (!is_prime[i]) continue;
        primes.push_back(i);
        for (int j = 2; j*i <= n; j++){
            is_prime[j*i] = false;
        }
    }

    return primes;
}

void dfs(set<int>& res, vector<int> div, int n, int cur){
    if (n == 1){
        res.insert(cur);
        return;
    }
    for (int d : div){
        if (n % d == 0){
            dfs(res, div, n/d, cur+d-1);
        }
    }   
}

int main(){
    vector<int> primes = primes_to(sqrt(1000000000)+1);
    int n; cin >> n;
    int cpy_n = n;
    vector<int> p_factors;
    for (int i = 0; i<primes.size() && cpy_n > 1; i++){
        while (cpy_n % primes[i] == 0){
            p_factors.push_back(primes[i]);
            cpy_n /= primes[i];
        }
    }
    if (cpy_n != 1){
        p_factors.push_back(cpy_n);
    }

    set<int> divis;
    divis.insert(1);
    for (int p : p_factors){
        vector<int> to_add;
        for (int d : divis){
            to_add.push_back(d*p);
        }
        for (int i : to_add){
            divis.insert(i);
        }
    }
    vector<int> div;
    for (int d : divis){
        if (d != 1) div.push_back(d);
    }
    
    set<int> res;
    dfs(res, div, n, 0);
    cout << res.size() << endl;
    for (int i : res){
        cout << i << " ";
    }
    cout << endl;
}

Compilation message (stderr)

toy.cpp: In function 'int main()':
toy.cpp:39:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |     for (int i = 0; i<primes.size() && cpy_n > 1; 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...