http://codeforces.com/problemset/problem/39/A
根据题意,输进来的都是一个常数乘上一个c++ (c是题目给的数),我们可以将其视为一个单元,许多个单元之间用加号或者减号连接,每一个单元的计算先后顺序都是任意的,求最大结果。
因为都是c++或者是++c,那么肯定是让减号开头的单元也就是常数是负数的先算,然后再算正的。排个序就可以了。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
struct node{
int x;
int f;
};
bool cp(node x,node y)
{
if(x.x!=y.x)return x.x<y.x;
if(x.x<0)return x.f<y.f;
else return x.f>y.f;
}
int main()
{
int a;
node p[11111];
char s[11111];
cin>>a>>s;
int l=strlen(s);
int js=0;
for(int i=0;i<l;i++)
{
if(s[i]!='a')continue;
if(i==0)
{
p[js].f=0;
p[js++].x=1;
}
else {
if(s[i-1]=='-')
{
p[js].f=0;
p[js++].x=-1;
}
else if(s[i-1]=='*')
{
int zz=i-2;
int da=0;
int ten=1;
while(s[zz]>='0'&&s[zz]<='9'&&zz>=0)
{
da=da+ten*(s[zz]-'0');
ten*=10;
zz--;
}
if(zz==-1)
{
p[js].f=0;
p[js++].x=da;
}
else if(s[zz]=='+')
{
p[js].f=0;
p[js++].x=da;
}else {
p[js].f=0;
p[js++].x=-da;
}
}
else if(s[i-1]=='+')
{
char ss=s[i-2];
if(i-2==0)
{
p[js].f=1;
p[js++].x=1;
continue;
}
char sss=s[i-3];
if(ss=='+'&&sss=='+'&&i-3==0)
{
p[js].f=1;
p[js++].x=1;
}
else if(ss=='+'&&sss=='+'&&s[i-3-1]=='a')
{
if(p[js-1].f==0)
p[js].f=0,p[js++].x=1;
else p[js].f=1,p[js++].x=1;
}
else if(ss=='+'&&sss=='+'&&s[i-3-1]=='+')
{
p[js].f=1;
p[js++].x=1;
}
else if(ss=='+'&&sss=='-')
{
p[js].f=1;
p[js++].x=-1;
}
else if(ss=='+'&&sss=='*')
{
int zz=i-4;
int da=0;
int ten=1;
while(s[zz]>='0'&&s[zz]<='9'&&zz>=0)
{
da=da+ten*(s[zz]-'0');
ten*=10;
zz--;
}
if(zz==-1)
{
p[js].f=1;
p[js++].x=da;
}
else if(s[zz]=='+')
{
p[js].f=1;
p[js++].x=da;
}else {
p[js].f=1;
p[js++].x=-da;
}
}
else {
p[js].f=0;
p[js++].x=1;
}
}
}
}
sort(p,p+js,cp);
long long ans=0;
int a1=a;
for(int i=0;i<js;i++)
{
if(p[i].f==1)
{
a++;
ans+=p[i].x*a;
}
else{
ans+=p[i].x*a;
a++;
}
}
long long ans1=0;
for(int i=js-1;i>=0;i--)
{
if(p[i].f==1)
{
a1++;
ans1+=p[i].x*a1;
}
else{
ans1+=p[i].x*a1;
a1++;
}
}
//for(int i=0;i<js;i++)
//cout<<p[i].f<<" "<<p[i].x<<endl;
//if(max(ans,ans1)==107216897)
//cout<<max(ans,ans1)+1<<endl;
cout<<max(ans,ans1)<<endl;
//107216897
//cin>>a;
return 0;
}