Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
35576 hi_hi 【J】T4 C++ 解答错误 8 250 MS 9636 KB 2331 2024-12-12 19:49:11

Tests(2/25):


#include<bits/stdc++.h> using namespace std; long long _,n,c[500005],dp[500005],ck[500005]; long long md=998244353; int main(){ scanf("%lld%lld",&_,&_); while(_--){ long long flag1=1,tt=0,flag2=1; scanf("%lld",&n); for(int i=1;i<=n*2-1;i++){ if(i%2==1){ scanf("%lld",&c[i]); } else{ char t; scanf(" %c",&t); if(t=='+'){ c[i]=-1; } else{ c[i]=-2; } } } memset(dp,0,sizeof(dp)); memset(ck,0,sizeof(ck)); long long sum=0; for(int i=1;i<=n*2-1;i+=2){ if(c[i-1]==-2 || i==1)ck[i]=ck[i-2]*c[i]+c[i]; else ck[i]=c[i]; ck[i]%=md; //printf("%lld ",ck[i]); } long long t=-1; for(int i=2;i<=n*2-1;i+=2){ if(c[i]==-1){ for(int j=1;j<=i;j++){ sum+=ck[j]; sum%=md; } dp[i-1]=sum; t=i+1; break; } } sum=0; if(t==-1){ long long sum=0; for(int i=1;i<=n*2-1;i++){ sum+=ck[i]; sum%=md; } printf("%lld\n",sum); continue; } long long ji=t-1; while(t!=-1 && t<2*n-1){ long long now=c[t]; dp[t]=dp[t-2]+((ji)/2+1)*c[t]; if(t==2*n-1)break; if(c[t+1]==-1){ ji=t+1; } while(t<2*n-1){ t+=2; if(c[t-1]==-1)now=c[t]; else now*=c[t]; //printf("///%lld %lld %lld %lld %lld/// ",ji,t,dp[ji-1],ck[t],now); dp[t]=dp[ji-1]+ck[t]+(ji/2)*now; // printf("..%lld..",now); if(c[t+1]==-1){ ji=t+1; t=t+2; break; } } } for(int i=1;i<=n*2-1;i+=2){ // printf("%lld ",dp[i]); sum+=dp[i]; } printf("%lld\n",sum); } }


测评信息: