Advertisement
Guest User

Untitled

a guest
Jan 19th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #pragma GCC optimize("O3")
  4. #pragma GCC optimize("Ofast")
  5. #pragma GCC optimize("unroll-loops")
  6. #define ll long long
  7. using namespace std;
  8. int main()
  9. {
  10.  //freopen("input.txt","r",stdin);
  11.  //freopen("output.txt","w",stdout);
  12.  ios_base::sync_with_stdio(0);
  13.  ll n,d,flag1=0,flag2=0;
  14.  cin>>n>>d;
  15.  if (n%d!=0) {cout<<"no solution";return 0;}
  16.  if (n==d) {cout<<d;return 0;}
  17.  if (n<d) {cout<<"no solution";return 0;}
  18.  if (d==1) {
  19.    flag1=1;
  20.    d++;
  21.    if (n%2==1){
  22.     flag2=1;
  23.     n++;
  24.    }
  25.  }
  26.  vector <ll> steps;
  27.  steps.push_back(1);
  28.  while(true){
  29.   steps.push_back(steps.back()*d);
  30.   if (steps.back()>n) break;
  31.  }
  32.  vector<pair<ll,ll> > need;
  33.  for (int i=steps.size()-1;i>=0;i--){
  34.   if (n<steps[i]) continue;
  35.   ll kol=0;
  36.   while(n>=steps[i]){
  37.     kol++;
  38.     n-=steps[i];
  39.    }
  40.    need.push_back(make_pair(i,kol));
  41.  }
  42.  int skobki=0;
  43.  string cnt="";
  44.  while(need.size()>0) {
  45.   int cur=need[need.size()-1].first;
  46.   cur--;
  47.   for (int i=0;i<(int)need.size();i++)
  48.    need[i].first-=cur;
  49.   for (int i=0;i<cur;i++)
  50.    if (flag1==1) cnt+="(1+1)*";
  51.    else {cnt+=char(d+'0');cnt+="*";}
  52.   if ((int)need.size()>1
  53.       ||need[(int)need.size()-1].second>1
  54.       ||((int)cnt.size()!=0&&cnt[(int)cnt.size()-1]=='*'&&flag1==1)) {
  55.     cnt+="(";
  56.     skobki++;
  57.   }
  58.   for (int i=0;i<need[need.size()-1].second; i++) {
  59.      if (flag1==1)cnt+="1+1";
  60.      else {cnt+=char(d+'0');cnt+="+";}
  61.    }
  62.    need.pop_back();
  63.   }
  64.   if(cnt.size()!=0&&cnt[cnt.size()-1]=='+') cnt.erase(cnt.size()-1);
  65.   for (int i=0;i<skobki;i++)
  66.     cnt+=")";
  67.   if (flag2==1) cnt+="-1";
  68.   cout<<cnt;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement