Submission #1350121

#TimeUsernameProblemLanguageResultExecution timeMemory
1350121biankToys (CEOI18_toy)C++20
100 / 100
691 ms109876 KiB
#include <bits/stdc++.h>
 
using namespace std;
 
#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)
#define forn(i, n) forsn(i, 0, n)
#define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--)
#define dforn(i, n) dforsn(i, 0, n)
 
using vi = vector<int>;
using ii = pair<int, int>;
using vii = vector<ii>;
using ll = long long;
using ld = long double;
using vll = vector<ll>;
using vb = vector<bool>;
using pll = pair<ll, ll>;
 
#define sz(x) int(x.size())
#define all(x) begin(x), end(x)
 
#define pb push_back
#define eb emplace_back
 
#define fst first
#define snd second
 
int main() {
    ios::sync_with_stdio(0); 
    cin.tie(0); cout.tie(0);
    
    int n;
    cin >> n;
    
    vi l, r;
    for (int d = 1; d * d <= n; d++) {
        if (n % d == 0) {
            l.pb(d);
            if (d * d != n) r.pb(n / d);
        }
    }
    reverse(all(r));
    
    vi divisors = l;
    divisors.insert(end(divisors), all(r));
    
    vector<vi> sums(sz(divisors));
    sums[0] = {0};
    forn(i, sz(divisors)) {
        forsn(j, 1, sz(divisors)) {
            if (divisors[i] % divisors[j] == 0) {
                int divisors_k = divisors[i] / divisors[j];
                int k = int(lower_bound(all(divisors), divisors_k) - begin(divisors));
                for (int x : sums[k]) sums[i].pb(x + divisors[j] - 1);
            }
        }
        sort(all(sums[i]));
        sums[i].erase(unique(all(sums[i])), end(sums[i]));
    }
    
    cout << sz(sums.back()) << "\n";
    for (int x : sums.back()) cout << x << " ";
    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...