Submission #1201951

#TimeUsernameProblemLanguageResultExecution timeMemory
1201951peraToys (CEOI18_toy)C++20
100 / 100
873 ms109788 KiB
#include<bits/stdc++.h>
using namespace std;
int main(){
   int n;
   cin >> n;
   vector<int> d;
   for(int i = 1;i * i <= n;i ++){
      if(n % i == 0){
         d.emplace_back(i);
         if(i * i != n){
            d.emplace_back(n / i);
         }
      }
   }
   auto f = [&](int x){
      int l = 0;
      for(int bit = 20;bit >= 0;bit --){
         l += 1 << bit;
         if(l >= (int)d.size() || d[l] > x){
            l -= 1 << bit;
         }
      }
      return l;
   };
   sort(d.begin() , d.end());
   vector<vector<int>> dp((int)d.size());
   for(int i = 0;i < (int)d.size();i ++){
      dp[i].emplace_back(d[i] - 1);
      for(int v = 1;v * v <= d[i];v ++){
         if(d[i] % (v + 1) == 0){
            for(int a : dp[f(d[i] / (v + 1))]){
               dp[i].emplace_back(a + v);
            }
            if(v + 1 == d[i]){
               continue;
            }
            for(int a : dp[f(v + 1)]){
               dp[i].emplace_back(a + d[i] / (v + 1) - 1);
            }
         }
      }
      sort(dp[i].begin() , dp[i].end());
      dp[i].erase(unique(dp[i].begin() , dp[i].end()) , dp[i].end());
   }
   cout << (int)dp.back().size() << '\n';
   for(int x : dp.back()){
      cout << x << " ";
   }
}
#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...