【悬赏3RMB】WA#1#2#9#10求调 49分
查看原帖
【悬赏3RMB】WA#1#2#9#10求调 49分
486799
BlackPanda楼主2022/8/1 12:23
#include <bits/stdc++.h>
using namespace std;

const long long P=998244353;
#define ll long long

char op;
ll v,n;
ll p1,p2,s1=1,s2=1;
ll maxv=-0x3f3f3f3f;	//乘法最小负数 

int main(){
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> op >> v;
		if(op == '+'){
			if(v > 0){
				p1+=v;
				p1%=P;	
			}
			else{
				p2+=v;
				p2%=P;
			}
		}
		else{
			if(v > 0){
				s1=s1*v%P;
			}
			else if(v < 0){
				if(maxv < v){
					maxv = v;
					s2%=P;
					s2=s2*v;
				}	
				else{
					s2=s2/maxv%P*v%P*maxv;
				}
			}
		}
	}
	//subtask 2
	if(p2 == 0 && s2 == 1)	{
		cout << p1*s1%P;	
		return 0;
	}
	//subtask 3
	if(s2 == 0){
		cout << ((p1*s1%P+p2)%P+P)%P;	
		return 0;
	}
	//subtask 4
	if(p2 == 0 && s2 > 0){
		cout << (p1*s1%P*s2%P)%P;
		return 0;
	}
	if(p2 == 0 && s2 < 0){
		cout << (s2/maxv*p1%P*s1%P)%P;
		return 0;
	}
	//subtask 5 && 1
	ll ans;
	if(s2>0){	//乘法的负数有偶数个 
		//ans=((maxv%P*s1%P)+s3%P)*s2%P*s4%P;
		//ans=p1*s1%P*s2%P+p2*s2/maxv%P*s1%P;
		ans=p1*s1%P*s2%P+p2;
	}
	else if(s2<0){	//奇数个乘法的负数 
		//ans=((maxv%P*s3%P)+s1%P)*(s2*s4/maxv);
	//	ans=p1*s1%P*s2/maxv%P+p2*s2%P*p1%P;
		ans=(p2*s2%P+p1%P)*s1%P;
	}	
	cout << (ans%P+P)%P;
	return 0;
}
2022/8/1 12:23
加载中...