Submission #1201951

#TimeUsernameProblemLanguageResultExecution timeMemory
1201951peraToys (CEOI18_toy)C++20
100 / 100
873 ms109788 KiB
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; vector<int> d; for(int i = 1;i * i <= n;i ++){ if(n % i == 0){ d.emplace_back(i); if(i * i != n){ d.emplace_back(n / i); } } } auto f = [&](int x){ int l = 0; for(int bit = 20;bit >= 0;bit --){ l += 1 << bit; if(l >= (int)d.size() || d[l] > x){ l -= 1 << bit; } } return l; }; sort(d.begin() , d.end()); vector<vector<int>> dp((int)d.size()); for(int i = 0;i < (int)d.size();i ++){ dp[i].emplace_back(d[i] - 1); for(int v = 1;v * v <= d[i];v ++){ if(d[i] % (v + 1) == 0){ for(int a : dp[f(d[i] / (v + 1))]){ dp[i].emplace_back(a + v); } if(v + 1 == d[i]){ continue; } for(int a : dp[f(v + 1)]){ dp[i].emplace_back(a + d[i] / (v + 1) - 1); } } } sort(dp[i].begin() , dp[i].end()); dp[i].erase(unique(dp[i].begin() , dp[i].end()) , dp[i].end()); } cout << (int)dp.back().size() << '\n'; for(int x : dp.back()){ cout << x << " "; } }
#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...