题目大意:注意表达式、基本式的形式限制了很多,所以并不是很难。
解题思路:初始 a++ 、++a 的情况算一波,然后系数从小到大排序,因为 a 是逐渐递增+1的,然后保证 a 是从 1、2、3... 开始算的。
1
-5*a++-3*++a+a++
~
-3*++a+a+++5*a++
原始:
a0: 2 + 2 + 3
拆分:
a1: 1 + 0 + 0
a2: 1 + 2 + 3
AC 代码
#include<bits/stdc++.h> #include<cmath> #define mem(a,b) memset(a,b,sizeof a); using namespace std; typedef long long ll; char s[110000]; int prr[11000]; int main() { int a; while(~scanf("%d%s",&a,s)) { int len=strlen(s); if(s[0]!='-') { for(int i=len;i>0;i--) s[i]=s[i-1]; s[0]='+'; len++; } int k,p,q=0,sum=0; for(int i=0;i<len;i+=3) { if(s[i++]=='+') k=1; else k=-1; p=0; while(i<len&&'0'<=s[i]&&s[i]<='9') (p*=10)+=s[i++]-'0'; if(s[i]=='*') i++; else p=1; prr[q++]=k*p; sum+=(a-(s[i]=='a'))*k*p; } sort(prr,prr+q); for(int i=1;i<=q;i++) { sum+=i*prr[i-1]; } printf("%d\n",sum); } return 0; }