Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <string>
- #include <iostream>
- #include <cstdlib>
- #include <algorithm>
- #include <deque>
- using namespace std;
- int ad=0,sb=0,add[250],sub[250];
- bool func(int x, int y) {return (x>y);}
- void fill(string vl, int zn[])
- {
- int prs=0,zg=1, ezz;
- bool ezg=false;
- for (int i=0; i<vl.length(); i++)
- {
- if (vl[i] == '?')
- {
- prs++;
- }
- if (vl[i] == '+' || vl[i] == '-' || i==vl.length()-1)
- {
- if (ezg)
- {
- if (ezz=1)
- {
- add[ad]=prs;
- prs=0;
- ad++;
- }
- else if (ezz=2)
- {
- sub[sb]=prs;
- prs=0;
- sb++;
- }
- ezg=false;
- }
- else
- {
- if (zn[zg]==1)
- {
- add[ad]=prs;
- prs=0;
- ad++;
- }
- else if(zn[zg]==2)
- {
- sub[sb]=prs;
- prs=0;
- sb++;
- }
- }
- if (vl[i] == '+')
- {
- if (zg>1)
- {
- if (zn[zg-1]==1)
- {
- zn[zg]=1;
- }
- else if (zn[zg-1]==2)
- {
- zn[zg]=2;
- }
- }
- else
- zn[zg]=1;
- }
- else if (vl[i] == '-')
- {
- if (zg>1)
- {
- if (zn[zg-1]==1)
- {
- zn[zg]=2;
- }
- else if (zn[zg-1]==2)
- {
- zn[zg]=1;
- }
- }
- else
- zn[zg]=2;
- }
- }
- if (vl[i] == '(')
- {
- zg++;
- zn[zg]=zn[zg-1];
- }
- if (vl[i] == ')')
- {
- if (vl[i-1] != ')')
- ezz=zn[zg];
- zg--;
- ezg=true;
- }
- }
- }
- int main()
- {
- string vl, br;
- char ch[10];
- long int res=0,tmp=0;
- int ifr=0,ibk=1,zn[250],i,j,x,naj=0;
- deque<int> broj;
- cin >> vl >> br;
- for (i=0; i<br.length();i++)
- {
- ch[0]=br[i];
- x=atoi(ch);
- broj.push_back(x);
- }
- sort(broj.begin(),broj.end());
- for (i=0; i<250;i++)
- {
- zn[i]=1;
- }
- fill(vl,zn);
- int cya[250], cys[250],mxs=0,mxa=0, adv[250],sbv[250];
- memset(cya,0,sizeof(cya));
- memset(cys,0,sizeof(cys));
- memset(adv,0,sizeof(adv));
- memset(sbv,0,sizeof(sbv));
- sort(add,add+ad);
- sort(sub,sub+sb,func);
- for (i=0; i<ad; i++)
- {
- if (add[i]>mxa) mxa=add[i];
- for (j=1; j<=add[i]; j++)
- cya[j]++;
- }
- for (i=0; i<sb; i++)
- {
- if (sub[i]>mxs) mxs=sub[i];
- for (j=1; j<=sub[i]; j++)
- cys[j]++;
- }
- for (i=mxs; i>0; i--)
- {
- for (j=0; j<cys[i]; j++)
- {
- // if (broj.back()==0)
- // broj.pop_back();
- // else
- {
- sbv[i]+=broj.front();
- broj.pop_front();
- }
- }
- for (j=2; j<=i; j++)
- sbv[i]*=10;
- res-=sbv[i];
- }
- sort(broj.begin(),broj.end());
- for (i=1; i<=mxa; i++)
- {
- for (j=0; j<cya[i]; j++)
- {
- adv[i]+=broj.front();
- broj.pop_front();
- }
- for (j=2; j<=i; j++)
- adv[i]*=10;
- res+=adv[i];
- }
- cout << res << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement