subtask4和subtask5都有一个点过不去,求大佬解答,谢谢了
#include<iostream>//60分代码
using namespace std;
const int N=1e5+5,mod=998244353;
typedef long long ll;
ll zc[N],zj[N];//乘法与加法为正数
ll fc[N],fj[N];//乘法与加法为负数
int zcc,zjj,fcc,fjj;
int main(){
int n;
ll zjt=0,zct=1,fjt=0,mafc=-1e18,fct=1,ans=-1e18;
//zjt是正加数之和,zct是正乘数之积,以此类推,mafc是负乘数中的最大值,ans为最终答案
cin>>n;
for(int i=1;i<=n;i++){
char op;
ll v;
cin>>op>>v;
if(op=='+'){
if(v>0){
zj[++zjj]=v;
zjt=(zjt+zj[zjj])%mod;
}
else{
fj[++fjj]=v;
fjt=(fjt+fj[fjj])%mod;
}
}
else{
if(v>0){
zc[++zcc]=v;
zct=(zct*zc[zcc])%mod;
}
else{
fc[++fcc]=v;
fct=(fct*fc[fcc])%mod;
mafc=max(mafc,v);
}
}
}
if(!fcc) ans=(zjt*zct%mod+fjt)%mod;
else if(fcc%2==1){
fct/=mafc;
if(!fjj) ans=zjt%mod*fct%mod*zct%mod;
else ans=(mafc*fjt%mod+zjt)%mod*zct%mod*fct%mod;
}
else{
fct/=mafc;
ans=(mafc*zjt%mod+fjt)%mod*zct%mod*fct%mod;
}
cout<<(ans%mod+mod)%mod<<endl;
}