제출 #1190578

#제출 시각아이디문제언어결과실행 시간메모리
1190578AlgorithmWarriorToys (CEOI18_toy)C++20
79 / 100
5095 ms4652 KiB
#include <bits/stdc++.h>

using namespace std;

int n;
int nrd;
int divi[100000];
vector<int>ans;

void get_divis(){
    cin>>n;
    int i;
    for(i=1;i*i<n;++i)
        if(n%i==0){
            divi[++nrd]=i;
            divi[++nrd]=n/i;
        }
    if(i*i==n)
        divi[++nrd]=i;
    sort(divi+1,divi+nrd+1);
}

void myback(int prod,int sum,int id){
    if(prod==n)
        ans.push_back(sum);
    else{
        int i;
        for(i=id;i<=nrd;++i)
            if(1LL*prod*divi[i]<=n && n%(prod*divi[i])==0)
                myback(prod*divi[i],sum+divi[i]-1,i);
    }
}

void write(){
    sort(ans.begin(),ans.end());
    auto it=unique(ans.begin(),ans.end());
    ans.resize(distance(ans.begin(),it));
    cout<<ans.size()<<'\n';
    for(auto el : ans)
        cout<<el<<' ';
}

int main()
{
    get_divis();
    myback(1,0,2);
    write();
    return 0;
}
#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...