Submission #585010

#TimeUsernameProblemLanguageResultExecution timeMemory
585010hibikiToys (CEOI18_toy)C++11
59 / 100
1694 ms102376 KiB
#include<bits/stdc++.h>
using namespace std;

#define pb push_back
#define sz(x) (int)x.size()

int n;
set<int> sum[100005], ans;
map<pair<int,int>, bool> mp;

void find(int nw, int add)
{
    if(nw < 100005)
    {
        for(auto _: sum[nw])
            ans.insert(add + _);
        return ;
    }
    if(mp[{nw, add}]) return ;
    mp[{nw,add}] = true;
    find(1, add + nw - 1);
    for(int j = 2; j * j <= nw; j++)
    {
        if(n % j == 0)
        {
            int a = j;
            int b = nw / j;
            find(a, add + b - 1);
            find(b, add + a - 1);
        }
    }
}

int main()
{
    sum[1].insert(0);
    for(int i = 2; i < 100005; i++)
    {
        for(int j = 1; j * j <= i; j++)
        {
            if(i % j == 0)
            {
                int a = j;
                int b = i / j;
                for(auto _: sum[b])
                {
                    sum[i].insert(a - 1 + _);
                }
                for(auto _: sum[a])
                {
                    sum[i].insert(b - 1 + _);
                }
            }
        }
    }
    scanf("%d",&n);
    find(n, 0);
    printf("%d\n",sz(ans));
    for(auto _: ans)
        printf("%d ",_);
    printf("\n");
    return 0;
}

Compilation message (stderr)

toy.cpp: In function 'int main()':
toy.cpp:56:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   56 |     scanf("%d",&n);
      |     ~~~~~^~~~~~~~~
#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...