Submission #305127

#TimeUsernameProblemLanguageResultExecution timeMemory
305127miss_robotToys (CEOI18_toy)C++14
100 / 100
979 ms79900 KiB
#include <bits/stdc++.h> #pragma GCC optimize("Ofast") using namespace std; int n; unordered_map<string, unordered_set<int>> dp; unordered_map<string, int> prod; vector<int> p; string c; void smaller(int i, string& t, string& r){ if(i == n){ int s = prod[t]/prod[r]-1; unordered_set<int> *tmp1 = &dp[r], *tmp2 = &dp[t]; for(int x : *tmp1) tmp2->insert(x+s); return; } for(int j = t[i]; j >= 0; j--){ r.push_back(j); smaller(i+1, t, r); r.pop_back(); } } void solve(int i, string& t){ if(i == n){ string r=""; smaller(0, t, r); return; } for(int j = 0; j <= c[i]; j++){ t.push_back(j); solve(i+1, t); t.pop_back(); } } void pre(int i, int s, string &t){ if(i == n){ prod[t] = s; return; } for(int j = 0; j <= c[i]; j++){ t.push_back(j); pre(i+1, s, t); s *= p[i]; t.pop_back(); } } int main(){ cin.tie(0); ios::sync_with_stdio(0); cin >> n; int temp = sqrt(n); for(int i = 2; i <= temp; i++){ if(!(n%i)) p.push_back(i), c.push_back(0); while(!(n%i)){ c.back()++; n /= i; } } if(n > 1) p.push_back(n), c.push_back(1); n = p.size(); string t(n, 0); dp[t].insert(0); t=""; pre(0, 1, t); solve(0, t); vector<int> sol(dp[c].begin(), dp[c].end()); sort(sol.begin(), sol.end()); cout << sol.size() << "\n"; for(int x : sol) cout << x << " "; 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...