首先,注意一下题面!发现读入是非常好读的(自我吐槽)。
然后拆出来每个单项式的系数和到底是“a++”还是“++a”
然后答案加上系数*最初的a如果是“a++”再减去一个a
这样就等价于a的初值为1了……然后把系数从小到大排序然后搞一下就好了
十分巧妙
#include
#include
#include
#include
using namespace std;
bool flag;
int a,n,i,j,k,x,o,ans;
int w[10011],tot;
char s[100011];
int main()
{
scanf("%d\n%s",&a,s+1);
n=strlen(s+1);
if (s[1]!='-')
{
for (i=n+1;i>1;i--) s[i]=s[i-1];
s[1]='+';
n++;
}
for (i=1;i<=n;i+=3)
{
if (s[i++]=='+') k=1;
else k=-1;
j=0;
while (i<=n&&'0'<=s[i]&&s[i]<='9') (j*=10)+=s[i++]-48;
if (s[i]=='*') i++;
else j=1;
w[++tot]=(k*=j);
ans+=(a-(s[i]=='a'))*k;
}
sort(w+1,w+tot+1);
for (i=1;i<=tot;i++) ans+=i*w[i];
cout<