답안 #124463

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
124463 2019-07-03T11:22:38 Z youssefbou62 Toys (CEOI18_toy) C++14
0 / 100
2 ms 256 KB
#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;
void solve(int n, int x)
{
    
    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 i = 1; i * i <= n; i++)
    {
        if (n % i == 0)
        {
            if (i != 1)
                solve(n / i, x + i - 1);
            solve(i, x + n / i - 1);
        }
    }
}


int main()
{
    scanf("%d",&N) ;
    solve(N, 0);
    sort(all(ans)); 
    cout << ans.size() << endl; 
    for (int i : ans)
        printf("%d ",i) ; 
    
}
*/
map<int,set<int>> dp ; 
void add  ( set<int>& s , set<int> t , int edge ){
    for(int i : t )s.insert(i + edge ) ; 
}
set<int> dfs (int n ){
    if( n == 1 ){
        return {0} ; 
    }
    if( dp.count(n) )return dp[n]; 
    set<int> sum ; 
    for (int i = 1; i * i <= n; i++){
        if( n % i == 0 ){
            if( i!= 1 )
            add( sum , dfs ( n / i) , i - 1 ) ; 
            add ( sum , dfs( i ) , n/i - 1  ); 
        }
    }  
    return dp[n] = sum ; 
}

int main(){
    int N ; 
    scanf("%d",&N) ; 
    set <int> ans ; 
    dfs(N) ;  
    cout << dp[N].size() << endl; 
    for(int i : dp[N] )cout << i << " " ; 
 }

Compilation message

toy.cpp: In function 'int main()':
toy.cpp:85:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&N) ; 
     ~~~~~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -