Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stack>
- #include <algorithm>
- #include <cstring>
- #include <cstdlib>
- #include <cstdio>
- #include <sstream>
- using namespace std;
- string niza[251];
- int closing[251];
- int n;
- void remove_brackets(string &x,int s,int e,int znak)
- {
- int i=s;
- while(i<e)
- {
- if((x[i]>='0' && x[i]<='9') || x[i]=='?')
- i++;
- if(x[i]=='-' && x[i+1]!='(')
- {
- if(znak==1) x[i]='+';
- i++;
- }
- if(x[i]=='+' && x[i+1]!='(')
- {
- if(znak==1) x[i]='-';
- i++;
- }
- if(x[i]=='-' && x[i+1]=='(')
- {
- remove_brackets(x,i+2,closing[i+1]-1,(znak+1)%2 );
- if(znak==1) x[i]='+';
- i=closing[i+1]+1;
- }
- if(x[i]=='+' && x[i+1]=='(')
- {
- remove_brackets(x,i+2,closing[i+1]-1,znak );
- if(znak==1) x[i]='-';
- i=closing[i+1]+1;
- }
- }
- }
- void split(string x)
- {
- n=0;
- int j=0;
- string next="";
- while(j<x.size())
- {
- if((x[j]>='0' && x[j]<='9') || x[j]=='?')
- {
- while((x[j]>='0' && x[j]<='9') || x[j]=='?')
- {
- next+=x[j];
- j++;
- }
- niza[n++]=next;
- next="";
- }
- if(x[j]=='(' || x[j]==')')
- j++;
- if(x[j]=='-' || x[j]=='+')
- {
- niza[n++]=x[j++];
- }
- }
- }
- void replace_with_digits(string d)
- {
- int i,j,k;
- int changeI;
- int dig;
- int temp;
- bool chk=true;
- bool vis[250];
- memset(vis,false,sizeof(vis));
- for(j=d.size()-1;j>=0;j--)
- {
- changeI=-1;
- dig=0;
- temp=0;
- for(i=0;i<n;i+=2)
- {
- if(i==0 || niza[i-1]=="+")
- {
- for(k=niza[i].size()-1;k>=0;k--)
- {
- if(niza[i][k]=='?' && niza[i].size()-k>temp)
- {
- temp=niza[i].size()-k;
- dig=k;
- changeI=i;
- }
- }
- }
- }
- if(changeI==-1) break;
- vis[j]=true;
- niza[changeI][dig]=d[j];
- }
- for(j=0;j<d.size();j++)
- {
- if(vis[j]) continue;
- changeI=-1;
- dig=0;
- temp=0;
- for(i=0;i<n;i+=2)
- {
- if(i>0 && niza[i-1]=="-")
- {
- for(k=niza[i].size()-1;k>=0;k--)
- {
- if(niza[i][k]=='?' && niza[i].size()-k>temp)
- {
- temp=niza[i].size()-k;
- dig=k;
- changeI=i;
- }
- }
- }
- }
- if(changeI==-1) break;
- vis[j]=true;
- niza[changeI][dig]=d[j];
- }
- }
- int toInt(string x)
- {
- istringstream is(x);
- int a;
- is>>a;
- return a;
- }
- int sumAll()
- {
- int res=0;
- for(int i=0;i<n;i+=2)
- {
- if(i==0 || niza[i-1]=="+")
- res+=toInt(niza[i]);
- else res-=toInt(niza[i]);
- }
- return res;
- }
- int main()
- {
- string x;
- string d;
- int i,j;
- stack<int> s;
- cin>>x;
- cin>>d;
- for(i=0;i<x.size();i++)
- {
- if(x[i]=='(')
- s.push(i);
- if(x[i]==')')
- {
- closing[s.top()]=i;
- s.pop();
- }
- }
- remove_brackets(x,0,x.size()-1,0);
- split(x);
- sort(d.begin(),d.end());
- replace_with_digits(d);
- cout<<sumAll()<<endl;
- // cout<<endl;
- // cout<<endl<<x<<endl;
- // for(i=0;i<n;i++)
- // cout<<niza[i]<<" ";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement