제출 #1196903

#제출 시각아이디문제언어결과실행 시간메모리
1196903LucaLucaMToys (CEOI18_toy)C++17
100 / 100
876 ms109868 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>

using ll = long long;
#define debug(x) #x << " = " << x << '\n'

int main() {
  #ifdef LOCAL
    freopen("input.txt", "r", stdin);
  #endif
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(0);
  
  int n;
  std::cin >> n;

  std::vector<int> divs;
  for (int d = 1; d * d <= n; d++) {
    if (n % d == 0) {
      divs.push_back(d);
      if (d * d != n) {
        divs.push_back(n / d);
      }
    }
  }

  std::sort(divs.begin(), divs.end());

  int sz = (int) divs.size();
  std::vector<std::vector<int>> sums(sz);
  
  sums[0].push_back(0);
  for (int i = 1; i < sz; i++) {
    for (int j = 0; j < i; j++) {
      if (divs[i] % divs[j] == 0) {
        // sums[i] U= sums[j] + divs[i] / divs[j] - 1
        for (int k : sums[j]) {
          sums[i].push_back(k + divs[i] / divs[j] - 1);
        }
      }
    }
    std::sort(sums[i].begin(), sums[i].end());
    sums[i].erase(std::unique(sums[i].begin(), sums[i].end()), sums[i].end());
  }
  
  std::cout << sums.back().size() << '\n';
  for (int x : sums.back()) {
    std::cout << x << ' ';
  }
  
  return 0;
}
// lol aparent o aveam deja bagata
#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...