제출 #1168276

#제출 시각아이디문제언어결과실행 시간메모리
1168276altern23Toys (CEOI18_toy)C++20
79 / 100
5071 ms71856 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;

void calc(ll idx, ll sum){
    if(mp.count({idx, sum})) return;
    mp[{idx, sum}] = 1;
    if(idx == 1){
        ans.push_back(sum);
    }
    for(ll i = 1; i * i <= idx; i++){
        if(idx % i) continue;
        if(i != 1) calc(idx / i, sum + i - 1);
        if(idx / i != 1 && i != idx / i){
            calc(idx / (idx / i), sum + idx / 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;
        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...