제출 #1168307

#제출 시각아이디문제언어결과실행 시간메모리
1168307altern23Toys (CEOI18_toy)C++20
79 / 100
5090 ms65196 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
#define pii pair<ll, ll>
#define fi first
#define sec second
#define ld long double

const ll N = 1e5;
const ll INF = 4e18;
const ll MOD = 998244353;

vector<ll> ans;
map<pii, ll> mp;

vector<ll> D;

void calc(ll idx, ll sum){
    if(mp.count({idx, sum})) return;
    mp[{idx, sum}] = 1;
    if(idx == 1){
        ans.push_back(sum);
        return;
    }
    for(auto i : D){
        if(i > idx) break;
        if(idx % i == 0){
            calc(idx / i, sum + i - 1);
        }
    }
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int tc = 1;
    // cin >> tc;
    for(;tc--;){
        ll n; cin >> n;
        for(ll i = 1; i * i <= n; i++){
            if(n % i) continue;
            if(i != 1) D.push_back(i);
            if(i != n / i) D.push_back(n / i);
        }
        
        sort(D.begin(), D.end());
        calc(n, 0);

        sort(ans.begin(), ans.end());
        ans.erase(unique(ans.begin(), ans.end()), ans.end());
        cout << (int)ans.size() << "\n";
        for(auto i : ans) 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...