Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #pragma GCC optimize("O3")
- #pragma GCC optimize("Ofast")
- #pragma GCC optimize("unroll-loops")
- #define ll long long
- using namespace std;
- int main()
- {
- //freopen("input.txt","r",stdin);
- //freopen("output.txt","w",stdout);
- ios_base::sync_with_stdio(0);
- ll n,d,flag1=0,flag2=0;
- cin>>n>>d;
- if (n%d!=0) {cout<<"no solution";return 0;}
- if (n==d) {cout<<d;return 0;}
- if (n<d) {cout<<"no solution";return 0;}
- if (d==1) {
- flag1=1;
- d++;
- if (n%2==1){
- flag2=1;
- n++;
- }
- }
- vector <ll> steps;
- steps.push_back(1);
- while(true){
- steps.push_back(steps.back()*d);
- if (steps.back()>n) break;
- }
- vector<pair<ll,ll> > need;
- for (int i=steps.size()-1;i>=0;i--){
- if (n<steps[i]) continue;
- ll kol=0;
- while(n>=steps[i]){
- kol++;
- n-=steps[i];
- }
- need.push_back(make_pair(i,kol));
- }
- int skobki=0;
- string cnt="";
- while(need.size()>0) {
- int cur=need[need.size()-1].first;
- cur--;
- for (int i=0;i<(int)need.size();i++)
- need[i].first-=cur;
- for (int i=0;i<cur;i++)
- if (flag1==1) cnt+="(1+1)*";
- else {cnt+=char(d+'0');cnt+="*";}
- if ((int)need.size()>1
- ||need[(int)need.size()-1].second>1
- ||((int)cnt.size()!=0&&cnt[(int)cnt.size()-1]=='*'&&flag1==1)) {
- cnt+="(";
- skobki++;
- }
- for (int i=0;i<need[need.size()-1].second; i++) {
- if (flag1==1)cnt+="1+1";
- else {cnt+=char(d+'0');cnt+="+";}
- }
- need.pop_back();
- }
- if(cnt.size()!=0&&cnt[cnt.size()-1]=='+') cnt.erase(cnt.size()-1);
- for (int i=0;i<skobki;i++)
- cnt+=")";
- if (flag2==1) cnt+="-1";
- cout<<cnt;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement