Submission #255691

#TimeUsernameProblemLanguageResultExecution timeMemory
255691cfalasToys (CEOI18_toy)C++14
100 / 100
4019 ms86928 KiB
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define INF 10000000
#define MOD 1000000007
#define MID (l+r)/2
#define HASHMOD 2305843009213693951
#define ll long long
#define ull unsigned long long
#define F first
#define S second
typedef pair<ll, ll> ii;
typedef pair<ii, int> iii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef map<int, int> mii;

#define EPS 1e-6

#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
//typedef cc_hash_table<int, set<int>, hash<set<int> >> ht;
//map<int, set<int>> ans;
unordered_map<int, set<int> > ans;
int cnt=0;
int desc(ll n, set<int> cdiv=set<int>()){
    if(ans.count(n)!=0) return ans[n].size();
	//cout<<cdiv.size()<<endl;
	if(cdiv.empty()){
		cnt++;
		for(int i=2;i*i<=n;i++){
			if(n%i==0) cdiv.insert(i);
		}
	}
	else{
		auto i = cdiv.begin();
		while(i!=cdiv.end()){
			//cout<<n<<" "<<*i<<endl;
			if(*(i)==0 || n%(*(i))!=0 || n==*i) i = cdiv.erase(i);
			else i++;
		}
		//cout<<"-----"<<endl;

	}
	for(auto i : cdiv){
        if(n%i) continue;
        desc(n/i, cdiv);
		for(auto q : ans[n/i])
			ans[n].insert(q+i-1);
    }
    ans[n].insert(n-1);
    return ans[n].size();
}

int main(){
    //ios::sync_with_stdio(false);
    //cin.tie(0);
    ll n;
    cin>>n;
    cout<<desc(n)<<endl;
    //for(int i=1;i<=10;i++) cout<<desc(i)<<" ";
    for(auto v : ans[n]) cout<<v<<" ";
	assert(cnt==1);
}
#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...