后缀表达式(思路)
参考: https://blog.csdn.net/qq_44322532/article/details/104117099
#include<iostream>
using namespace std;
int n,m;
long long absum,sum; //绝对值之和,原数据之和
int minn,maxx; //最小正数和最大负数
int main(){
cin>>n>>m;
int cnt = 0; //负数的个数
maxx = -0x7f7f7f7f; minn = 0x7f7f7f7f;
for(int i=1,x;i<=n+m+1;i++){
cin>>x;
absum += x<0?-x:x;
sum += x;
if(x<0){
cnt++;
maxx = maxx<x?x:maxx; //最大负数
}else minn = minn>x?x:minn; //最小正数
}
if(m<cnt){ //负号小于负数
if(cnt==n+m+1){ //全为负数
cout<<absum+2*maxx<<endl;
}else if(m==0){ //没有负号
cout<<sum<<endl;
}else cout<<absum<<endl; //有正有负
}else if(m==cnt){ //负号=负数
cout<<absum<<endl;
}else{ //负号大于正数
if(cnt==0){ //全为正数
cout<<absum-2*minn<<endl;
}else cout<<absum<<endl;
}
return 0;
}