题目分析: 错误:很多同学一开始会想到中序表达式,排序然后加上大的数减去小的数,虽然示例能通过但这是一个坑。 后缀表达式:其实后缀表达式是带有优先级的表达式,比如: 1 2 1 2 3 4 如果按中序来就是4+3-2-1=4 后缀可以是4 1 2 - - 3 + 相当于4-(1-2)+3=8 那么根据高中知识可以知道: X-(X+X+X+X)=X-X-X-X-X X-(X-X-X-X)=X-X+X+X+X 如果有减号可以将+号变成-号,将-号变成+号 那么就可以大于0的数就+,小于0的数就- 注意:如果全部数都小于0,则第一个数也为负数 必须有一个数要减掉,则就是最小的数 题目代码:
#include <bits/stdc++.h>
using namespace std;
int num[200005];
int main()
{
int N,M;
cin>>N>>M;
int size=N+M+1;
for(int i=0;i<size;i++)cin>>num[i];
sort(num,num+size);
long long tot=0;
if(M==0)
{
for(int i=0;i<size;i++)tot+=num[i];
}else{
tot-=num[0];
for(int i=1;i<size-1;i++)
{
if(num[i]>0)tot+=num[i];
else tot-=num[i];
}
tot+=num[size-1];
}
cout<<tot<<endl;
return 0;
}
|