Submission #966995

#TimeUsernameProblemLanguageResultExecution timeMemory
966995Charizard2021Toys (CEOI18_toy)C++17
59 / 100
5037 ms8208 KiB
#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 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...