Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int curOper[1000001];
- vector<int> ans;
- void makeAns(int n)
- {
- ans.push_back(n);
- if (n==1) return;
- int mn=1e9,numOfOper;
- if (mn>curOper[n-1]) mn=curOper[n-1],numOfOper=1;
- if (n%2==0 && mn>curOper[n/2]) mn=curOper[n/2],numOfOper=2;
- if (n%3==0 && mn>curOper[n/3]) mn=curOper[n/3],numOfOper=3;
- if (numOfOper==1) makeAns(n-1);
- if (numOfOper==2) makeAns(n/2);
- if (numOfOper==3) makeAns(n/3);
- }
- int main() {
- int n;
- cin>>n;
- memset(curOper,0,sizeof(curOper));
- if (n==1) return cout<<"0\n1",0;
- for (int i=2;i<=n;i++)
- {
- curOper[i]=curOper[i-1]+1;
- if (i%2==0 && curOper[i/2]+1<curOper[i])
- curOper[i]=curOper[i/2]+1;
- if (i%3==0 && curOper[i/3]+1<curOper[i])
- curOper[i]=curOper[i/3]+1;
- }
- cout<<curOper[n]<<endl;
- curOper[0]=1e9;
- makeAns(n);
- reverse(ans.begin(),ans.end());
- for (int i=0;i<ans.size();i++)
- cout<<ans[i]<<' ';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement