Submission #493221

#TimeUsernameProblemLanguageResultExecution timeMemory
493221blueToys (CEOI18_toy)C++17
79 / 100
5031 ms71568 KiB
#include <iostream> #include <vector> #include <set> #include <algorithm> #include <map> using namespace std; #define sz(x) (int(x.size())) using vi = vector<int>; map< int, vector<int> > res; void solve(int i) { // cerr << "solve " << i << '\n'; if(res.find(i) != res.end()) return; vi ans(1, i-1); for(int j = 2; j < i && j*j <= i; j++) { if(i % j == 0) { int u = j; int v = i/j; solve(u); solve(v); for(int a: res[u]) for(int b: res[v]) ans.push_back(a+b); } } sort(ans.begin(), ans.end()); ans.erase(unique(ans.begin(), ans.end()), ans.end()); res[i] = ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; // vector<int> res[1+n]; // for(int i = 1; i <= n; i++) // { // res[i].push_back(i-1); // for(int j = 1; j < i && j*j <= i; j++) // { // if(i % j == 0) // { // int u = j; // int v = i/j; // for(int a: res[u]) // for(int b: res[v]) // res[i].push_back(a+b); // // break; // } // } // // sort(res[i].begin(), res[i].end()); // // res[i].erase(unique(res[i].begin(), res[i].end()), res[i].end()); // // // cerr << i << " : " << sz(res[i]) << '\n'; // } solve(n); vi ans = res[n]; cout << sz(ans) << '\n'; for(int r: ans) cout << r << ' '; 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...