Rt,输出 9170。
#include <bits/stdc++.h>
#define FstIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define pb push_back
#define mem(a, v) memset(a, v, sizeof a)
#define pii pair<ll, ll>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
const ll N = 2e7, M = 80 + 5;
const ll mod = 1e9 + 7, mod2 = 998244353;
const ld eps = 1e-6;
string s;
ll n, L[N];
ll Mp[10], f[N];
signed main()
{
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
FstIO;
cin >> s;
n = s.size(); s = ' ' + s;
ll c = 0;
for (ll i = 1; i <= n; ++ i )
{
// if (i == 1) { L[1] = 1; continue; }
ll l = L[i - 1];
while ((Mp[s[i] - '0'] || Mp[c]) && l < i - 1)
{
-- Mp[c];
c -= (s[l] - '0');
-- Mp[s[l] - '0'];
++ l;
}
if (l == L[i - 1]) L[i] = l;
else L[i] = l - 1;
++ Mp[s[i] - '0'];
c += (s[i] - '0');
++ Mp[c];
}
// for (ll i = 1; i <= n; ++ i ) cout << L[i] << ' '; cout << '\n';
f[0] = 1;
for (ll i = 1; i <= n; ++ i )
{
for (ll j = i - 1; j >= L[i]; -- j )
{
f[i] = (f[i] + f[j]) % mod;
}
}
// for (ll i = 1; i <= n; ++ i ) cout << f[i] << ' '; cout << '\n';
cout << f[n] << '\n';
return 0;
cout.flush();
}