Submission #927935

#TimeUsernameProblemLanguageResultExecution timeMemory
927935TAhmed33Toys (CEOI18_toy)C++98
100 / 100
1661 ms86864 KiB
#include <bits/stdc++.h>
using namespace std;
int main () {
	int n; cin >> n;
	vector <int> divs;
	map <int, int> cmp;
	for (int i = 1; i * i <= n; i++) {
		if (n % i == 0) {
			if (i * i != n) divs.push_back(n / i);
			divs.push_back(i);
		}
	}
	int s = 0;
	sort(divs.begin(), divs.end());
	for (int i = 0; i < (int)divs.size(); i++) {
		cmp[divs[i]] = i;
	}
	s = divs.size();
	set <int> dp[s];
	dp[0].insert(0);
	for (int i = 1; i < s; i++) {
		for (int j = 1; j * j <= divs[i]; j++) {
			if (divs[i] % j) continue;
			for (auto k : dp[cmp[j]]) {
				dp[i].insert(k + divs[i] / j - 1);
			}
			if (j == 1 || j * j == divs[i]) continue;
			int l = divs[i] / j;
			for (auto k : dp[cmp[l]]) {
				dp[i].insert(k + divs[i] / l - 1);
			}
		}
	}
	if (n == 1) {
		cout << "1\n0" << '\n'; return 0;
	}
	cout << (int)dp[s - 1].size()  << '\n';
	for (auto i : dp[s - 1]) {
		if (i) 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...