Submission #1353709

#TimeUsernameProblemLanguageResultExecution timeMemory
1353709cnam9Toys (CEOI18_toy)C++20
79 / 100
171 ms13536 KiB
#include <iostream>
#include <algorithm>
#include <math.h>

using namespace std;

int divisors[673];
int *__divisors = divisors;
int answer[3282944];
int card = 0;

void recur(int n, int s, int it) {
    answer[card++] = s + n - 1;
    for (;; ++it) {
        int d = divisors[it];
        if (d * d > n) break;
        if (n % d) continue;
        recur(n / d, s + d - 1, it);
    }
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    // freopen("input.txt", "r", stdin);

    int n;
    cin >> n;

    if (n == 1) {
        cout << "1\n0";
        return 0;
    }

    for (int d = 2; d * d <= n; d++) {
        if (n % d == 0) {
            *__divisors++ = d;
        }
    }
    *__divisors++ = sqrt(n) + 1;
    recur(n, 0, 0);

    sort(answer, answer + card);
    card = unique(answer, answer + card) - answer;

    cout << card << '\n';
    for (int i = 0; i < card; i++) {
        cout << answer[i] << ' ';
    }

    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...