AcWing 1247 字尾表示式

2022-06-07 21:18:11 字數 781 閱讀 9703

原題鏈結

考察:貪心

錯誤思路一:

排序,加上n+1個較大值,減去m個較小值.

m個減號不一定是全部用來減,可以利用兩個減號a-(b-c)轉化為a-b+c,如果a-b+c>a+b-c此思路就錯誤.

正確思路:

如果要湊最大值,那麼需要()max-()min.但是這樣的表示式看起來只需要乙個+,如果我們把後面的括號去掉就可以獲得更多的減號,由此可以發現,如果括號外是-,可以湊成+號和-號.也就是說我們看起來只有n個-號,實際上最多能湊成m+n個減號,最少是min(1,m)個減號.所以這道題不需要考慮將+和-號放哪些位置.

1 #include 2 #include 3 #include 4

using

namespace

std;

5const

int n = 200010

;6 typedef long

long

ll;7

inta[n],cnt;

8ll ans,sum;

9int

main()

1021

if(m&&k<1) ans = ans-a[1]-a[1

];22

else

if(m&&k>m+n) ans = ans+a[cnt]+a[cnt];

23if(!m) ans =sum;

24 printf("

%lld\n

",ans);

25return0;

26 }

字尾表示式 中綴到字尾表示式

輸入空格跳出迴圈 while k getchar n 字尾表示式 此 僅限於0 9內的加減乘除 include include include define long 10 using namespace std typedef struct stack qstack void init qstac...

字尾表示式

字尾表示式的計算和中綴表示式轉字尾表示式 此處的運算用的是鍊錶的表示方法 以下為三個會涉及到的標頭檔案 error.h 字尾表示式 created by kyle.yang on 14 12 2.ifndef error h define error h include using namespac...

字尾表示式

對於乙個算術表示式我們的一般寫法是這樣的 3 4 5 6 這中寫法是中序表示式 而後序表示式則是將運算子放在運算元的後面,如 3 4 5 6 可以看出後序表示式中沒有括號,只表達了計算的順序,而這個順序恰好就是計算器中的一般計算順序。建立乙個棧s 從左到右讀表示式,如果讀到運算元就將它壓入棧s中,如...