求助
查看原帖
求助
310698
liyx19楼主2021/8/13 17:17

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;
}
2021/8/13 17:17
加载中...