Submission #966141

#TimeUsernameProblemLanguageResultExecution timeMemory
966141TobToys (CEOI18_toy)C++14
100 / 100
2786 ms82100 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3","unroll-loops") #define ll long long #define F first #define S second #define all(x) x.begin(), x.end() #define pb push_back #define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0) using namespace std; typedef pair <ll, ll> pii; const int C = 5007; int cnt, dc; vector <int> di[C]; unordered_map <int, int> did; unordered_map <ll, int> sd; vector <int> res; inline ll Enc(ll x, ll y) { return (x << 32) + y; } void rek(int n, int sum) { int o = sd[Enc(n, sum)]; if (o) return; sd[Enc(n, sum)] = 1; if (n == 1) { res.pb(sum); return; } int x = did[n]; for (int y : di[x]) { rek(n/y, sum + y - 1); } } int main () { FIO; int n; cin >> n; for (int i = 1; i*i <= n; i++) { if (n % i) continue; did[i] = ++dc; for (int j = 2; j*j <= i; j++) { if (i % j) continue; di[dc].pb(j); if (j * j != i) di[dc].pb(i/j); } di[dc].pb(i); if (i * i != n) { did[n/i] = ++dc; for (int j = 2; j*j <= n/i; j++) { if ((n/i) % j) continue; di[dc].pb(j); if (j * j != n/i) di[dc].pb(n/i/j); } di[dc].pb(n/i); } } rek(n, 0); sort(all(res)); cout << res.size() << "\n"; for (auto it : res) cout << it << " "; return 0; }
#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...