This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
vector<int> factors;
vector<vector<int> > adj;
vector<set<int> > factorsSubtree;
vector<set<int> > dp;
void dfs(int u){
dp[u].insert(factors[u] - 1);
for(int v : adj[u]){
dfs(v);
for(int y : dp[v]){
dp[u].insert(factors[u]/factors[v] - 1 + y);
}
factorsSubtree[u].insert(v);
for(int a : factorsSubtree[v]){
for(int y : dp[a]){
dp[u].insert(factors[u]/factors[a] - 1 + y);
}
factorsSubtree[u].insert(a);
}
}
}
int main(){
int n;
cin >> n;
for(int i = 1; i <= sqrt(n); i++){
if(n % i == 0){
factors.push_back(i);
if(i * i != n){
factors.push_back(n/i);
}
}
}
sort(factors.begin(), factors.end());
adj.resize((int)factors.size());
for(int i = 0; i < (int)factors.size(); i++){
for(int j = i + 1; j < (int)factors.size(); j++){
if(factors[j] % factors[i] == 0){
adj[j].push_back(i);
}
}
}
factorsSubtree.resize((int)factors.size());
dp.resize((int)factors.size());
dfs((int)factors.size() - 1);
cout << dp.back().size() << "\n";
for(int i : dp.back()){
cout << i << " ";
}
cout << "\n";
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |