제출 #124403

#제출 시각아이디문제언어결과실행 시간메모리
124403youssefbou62Toys (CEOI18_toy)C++14
39 / 100
5029 ms5728 KiB
#include <bits/stdc++.h>

using namespace std;

#define mp make_pair
#define fi first
#define se second
#define all(v) v.begin(), v.end()
#define allarr(a) a, a + n
#define ll long long
#define ull unsigned long long
#define pb push_back
#define fastio                        \
    ios_base::sync_with_stdio(false); \
    cin.tie(NULL);                    \
    cout.tie(NULL)
typedef pair<int, int> pi;
typedef pair<ll, ll> pll;
typedef pair<int, pi> trp;
typedef vector<pi> vpi;
typedef vector<pll> vpll;
ll _abs(ll x) { return (x > 0 ? x : -x); }

vector<int> ans;
set <pi> dp ; 
int N;
map<int,vector<int>> divisors ; 
void solve(int n, int x)
{
    // cout << n << " " << x << endl;
    if (x >= N)return ; 
    if (dp.find({n,x})!=dp.end())
            return;
    dp.insert({n,x}); 
    if (n == 1)
    {
        ans.pb(x);
        return;
    }
    
    for( int d : divisors[n] ){
        solve ( d , x + n / d - 1 ) ; 
    }
}
set<int> visited ; 
void gen(int n ){
    // cerr << n << endl; 
    if( visited.count(n) )return ; 
    if( n == 1 )return ; 
    for(int i = 1 ; i * i <= n ; i++ ){
        if( n % i == 0 ){
        divisors[n].pb(i) ; 
        if( i != 1 ){
        divisors[n].pb(n/i) ;
        gen( n / i ) ; 
        }
        gen( i ) ; 
        } 
    }
}

int main()
{
    cin >> N;
    gen(N) ;  
    solve(N, 0);
    cout << ans.size() << endl;
    sort(all(ans)); 
    for (int i : ans)
        cout << i << "  ";
}
#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...