Cod sursa(job #2768346)

Utilizator PatrickCplusplusPatrick Kristian Ondreovici PatrickCplusplus Data 10 august 2021 12:14:51
Problema Descompuneri Scor 28
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("desc.in");
ofstream fout("desc.out");

long long n, k;
vector <long long> d;
unordered_map <long long, int> fr;
long long dp[3005][3005];

int main(){
    fin >> n >> k;
    for (int i = 1; 1LL * i * i <= n; ++i){
        if (n % i == 0){
            d.push_back(i);
            if (n / i != i){
                d.push_back(n / i);
            }
        }
    }
    int s = d.size();
    sort(d.begin(), d.end());
    for (int i = 1; i <= s; ++i){
        fr[d[i - 1]] = i;
    }
    dp[s + 1][s] = 1;
    for (int i = s; i >= 2; --i){
        for (int j = s; j >= 1; --j){
            long long val1 = d[i - 1], val2 = d[j - 1];
            long long val = 1LL * val1 * val2;
            int index = fr[val];
            if (index){
                dp[i][j] = dp[i + 1][j] + dp[i][index];
            }
            else{
                dp[i][j] = dp[i + 1][j];
            }
        }
    }
    fout << dp[2][1] << "\n";
    int i = 2, j = 1;
    /*
    while (i <= s){
        long long val1 = d[i - 1], val2 = d[j - 1];
        long long val = 1LL * val1 * val2;
        int index = fr[val];
        if (index){
            if (dp[i][index] < k){
                k -= dp[i][index];
                ++i;
            }
            else{
                fout << d[i - 1] << " ";
                j = index;
            }
        }
        else{
            ++i;
        }
    }
    */
    fin.close();
    fout.close();
    return 0;
}