제출 #1246625

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

using namespace std;
set<int> ans;
map<vector<array<int,2> > , bool> visited;
bool sito[100000];

void f(vector<array<int,2> > v)
{
    int p = v.size()-1;
    for (int i = 0;i<p;i++) {
        if (v[i][1] == 0) swap(v[i],v[p]),p--;
    }
    while(v.back()[1] == 0) v.pop_back();
    sort(v.begin(),v.end());
    if (visited[v]) return;
    visited[v] = true;

    //for (auto a: v) cout<<a[0]<< " "<<a[1]<<",";cout<<endl;

    int z = 0;
    for (auto a: v){
        z += (a[0]-1)*a[1];
    }

    ans.insert(z);
    for (int i=0;i<v.size();i++)
    {
        if (v[i][1] > 1){
            v.push_back({v[i][0]*v[i][0],1});
            v[i][1]-=2;
            f(v);
            v.pop_back();
            v[i][1]+=2;
        }
        for (int j=i+1;j<v.size();j++)
        {
            v.push_back({v[i][0]*v[j][0],1});
            v[i][1]--;v[j][1]--;
            f(v);
            v.pop_back();
            v[i][1]++;v[j][1]++;
        }
    }
}

int main()
{
    //f({{2,0},{3,4},{6,0},{5,1}});

    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int n;
    cin>>n;

    if (n == 1){
        cout<<"1\n0"<<endl;
        return 0;
    }

    for (int i=2;i<=sqrt(n);i++){
        if (sito[i]) continue;
        for (int j=i*2;j<=sqrt(n);j+=i) sito[j] = true;
    }

    //cout<<"mine\n";
    vector<array<int,2> > v;

    for (int i=2;i<=sqrt(n);i++)
    {
        if (sito[i] == false && n%i == 0)
        {
            v.push_back({i,0});
            while (n%i == 0){
                n/=i;
                v.back()[1]++;
            }
        }
    }
    if (n > 1) v.push_back({n,1});

    //for (auto a: v) cout<<a[0]<<" "<<a[1]<<endl;cout<<"-\n";

    f(v);

    cout<<ans.size()<<endl;
    for (auto a: ans) cout<<a<<" ";
    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...