计数DP,会不了一点....
思路:
Code:
#include <bits/stdc++.h>
#define int long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
using namespace std;
const int mxn=2e5+10;
const int mxe=2e5+10;
const int mod=998244353;
map<int,int> mp;
int N,sum=0;
int a[mxn],dp[mxn];
void solve(){
cin>>N;
for(int i=1;i<=N;i++) cin>>a[i];
int res=1ll;
for(int i=1;i<=N;i++){
sum+=a[i];
dp[i]=res;
res=(res*2ll)%mod;
res=((res-dp[mp[sum]])%mod+mod)%mod;
mp[sum]=i;
}
cout<<dp[N]<<'\n';
}
signed main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int __=1;//cin>>__;
while(__--)solve();return 0;
}