Pagini recente » Cod sursa (job #832327) | Cod sursa (job #1077976) | Cod sursa (job #1865130) | Cod sursa (job #1064397) | Cod sursa (job #652976)
Cod sursa(job #652976)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("expresie2.in");
ofstream g("expresie2.out");
int st,r,n,okz,w,nr;
string s;
int dre(int &st);
int rot (int &st)
{
int p1[100000],t,n1=0,m=-33333,q,ok=0;
st++;
while (st<n) {
if (s[st]=='(') n1++,p1[n1]=rot(st);
if (s[st]=='[') n1++,p1[n1]=dre(st);
if ((s[st-1]=='('||s[st-1]==','||s[st-1]=='-')&&s[st]>='0'&&s[st]<='9') {
ok=0;
if (s[st-1]=='-') ok=1;
q=0;
while (s[st]>='0'&&s[st]<='9') q=q*10+(s[st]-'0'),st++;
n1++;
if (ok==1) q=q*-1;
p1[n1]=q;
nr++;
}
if (s[st]==')') {
m=p1[1];
st++;
for(t=2; t<=n1; t++) {
if (p1[t-1]>0) p1[t]+=p1[t-1];
m=max(m,p1[t]);
}
return m;
}
if (s[st]==','||s[st]=='-') st++;
}
return 0;
}
int dre(int &st)
{
int p1[100000],q,n2=0,ok=0;
st++;
while (st<n) {
if (s[st]=='(') n2++,p1[n2]=rot(st);
if (s[st]=='[') n2++,p1[n2]=dre(st);
if ((s[st-1]=='['||s[st-1]==','||s[st-1]=='-')&&s[st]>='0'&&s[st]<='9') {
ok=0;
if (s[st-1]=='-') ok=1;
q=0;
while (s[st]>='0'&&s[st]<='9') q=q*10+(s[st]-'0'),st++;
n2++;
if (ok==1) q=q*-1;
p1[n2]=q;
nr++;
}
if (s[st]==']') {
st++;
sort(p1+1,p1+n2+1);
return p1[(n2+1)/2];
}
if (s[st]==','||s[st]=='-') st++;
}
return 0;
}
int main()
{
f>>s;
s+='*';
n=s.length();
while (st<n-1) {
if (s[st]=='(') r+=rot(st);
else {
if (s[st]=='[') r+=dre(st);
else {
okz=0,w=0;
if (s[st]=='-') okz=1,st++;
if (s[st]==',') st++;
if (s[st]>='0'&&s[st]<='9') {
while (s[st]>='0'&&s[st]<='9') w=w*10+(s[st]-'0'),st++;
if (okz==1) w=w*-1;
r+=w;
nr++;
}
}
}
}
g<<nr<<'\n'<<r;
f.close();
g.close();
return 0;
}