제출 #1246641

#제출 시각아이디문제언어결과실행 시간메모리
1246641JovicaToys (CEOI18_toy)C++20
79 / 100
5098 ms121252 KiB
#include <bits/stdc++.h> using namespace std; set<int> ans; unordered_set<string> visited; bool sito[100000]; string encode(const vector<array<int,2>>& v) { // encode as "p1:e1;p2:e2;...;" string s; s.reserve(v.size() * 12); for (auto& a : v) { s += to_string(a[0]); s += ':'; s += to_string(a[1]); s += ';'; } return s; } void f(vector<array<int,2>> v) { int p = v.size()-1; for (int i = 0; i < p; i++) { if (v[i][1] == 0) { swap(v[i], v[p]); p--; } } while (!v.empty() && v.back()[1] == 0) { v.pop_back(); } sort(v.begin(), v.end()); string key = encode(v); if (visited.count(key)) return; visited.insert(key); int z = 0; for (int i = 0; i < (int)v.size(); i++) { z += (v[i][0] - 1) * v[i][1]; if (v[i][1] > 1) { v.push_back({v[i][0] * v[i][0], 1}); v[i][1] -= 2; f(v); v.pop_back(); v[i][1] += 2; } for (int j = i+1; j < (int)v.size(); j++) { v.push_back({v[i][0] * v[j][0], 1}); v[i][1]--; v[j][1]--; f(v); v.pop_back(); v[i][1]++; v[j][1]++; } } ans.insert(z); } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; const int B = sqrt(n); if (n == 1){ cout << "1\n0\n"; return 0; } for (int i = 2; i <= B; i++){ if (sito[i]) continue; for (int j = i*2; j <= B; j += i) { sito[j] = true; } } vector<array<int,2>> v; for (int i = 2; i <= B; i++) { if (!sito[i] && n % i == 0) { v.push_back({i,0}); while (n % i == 0){ n /= i; v.back()[1]++; } } } if (n > 1) { v.push_back({n,1}); } f(v); cout << ans.size() << "\n"; for (int a : ans) { cout << a << " "; } cout << "\n"; 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...