新聞中心
陽后第5天,基本康復(fù),回歸正常作息。
1247. 后綴表達式 - AcWing題庫
給定?NN?個加號、MM?個減號以及?N+M+1N+M+1?個整數(shù)?A1,A2,???,AN+M+1A1,A2,···,AN+M+1,小明想知道在所有由這?NN?個加號、MM?個減號以及?N+M+1N+M+1?個整數(shù)湊出的合法的后綴表達式中,結(jié)果大的是哪一個?
請你輸出這個大的結(jié)果。
例如使用?123+?123+?,則?“23+1?”“23+1?”?這個后綴表達式結(jié)果是?44,是大的。
輸入格式
第一行包含兩個整數(shù)?NN?和?MM。
第二行包含?N+M+1N+M+1?個整數(shù)?A1,A2,???,AN+M+1A1,A2,···,AN+M+1。
輸出格式
輸出一個整數(shù),代表答案。
數(shù)據(jù)范圍
0≤N,M≤1050≤N,M≤105,
?109≤Ai≤109?109≤Ai≤109
輸入樣例:
1 1
1 2 3
輸出樣例:
4
這道貪心題其實我一開始的想法是這樣的:n個+,m個 - ,那就用大的數(shù)作為基數(shù),降序排序后加上前n個,減去后m個即可。可是想法還是太簡單了wrong answer。看了題解以后才明白過來:根據(jù)后綴表達式的特性,顯然我們可以將多個 - 變成一個 - 和多個+(將后綴表達式表示成二叉樹更好理解一些,可以參考其他佬寫的這篇文章二叉樹應(yīng)用——后綴表達式構(gòu)建表達式樹_趙同學(xué)的博客-博客_后綴表達式轉(zhuǎn)二叉樹)
題目要求求出后綴表達式的大值,因此,當(dāng)m為0時,直接加和即可;m不為0時,ans = f[max] - f[min],ans += abs(f[i])即可。
#include#include
#includeusing namespace std;
typedef long long LL;
const int N = 2e5+10;
int f[N];
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<=n+m;i++) scanf("%d",&f[i]);
LL ans = 0;
if(!m) {
for(int i=0;i<=n+m;i++) ans+=f[i];
} else{
sort(f,f+n+m+1,greater());
ans = f[0] - f[n+m];
for(int i=1;i你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱:題:后綴表達式-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://ef60e0e.cn/article/gjjcg.html