| Task: | Laskutoimitus |
| Sender: | ollpu |
| Submission time: | 2025-12-20 18:49:22 +0200 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | 40 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 5 |
| #2 | ACCEPTED | 25 |
| #3 | ACCEPTED | 10 |
| #4 | RUNTIME ERROR | 0 |
| #5 | RUNTIME ERROR | 0 |
| #6 | RUNTIME ERROR | 0 |
| test | verdict | time | group | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 2, 6 | details |
| #2 | ACCEPTED | 0.00 s | 1, 2, 6 | details |
| #3 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5, 6 | details |
| #4 | ACCEPTED | 0.18 s | 2, 6 | details |
| #5 | ACCEPTED | 0.22 s | 2, 6 | details |
| #6 | ACCEPTED | 0.00 s | 2, 3, 4, 5, 6 | details |
| #7 | RUNTIME ERROR | 0.02 s | 6 | details |
| #8 | RUNTIME ERROR | 0.02 s | 6 | details |
| #9 | ACCEPTED | 0.02 s | 3, 4, 5, 6 | details |
| #10 | RUNTIME ERROR | 0.02 s | 4, 6 | details |
| #11 | RUNTIME ERROR | 0.02 s | 4, 6 | details |
| #12 | RUNTIME ERROR | 0.02 s | 5, 6 | details |
| #13 | RUNTIME ERROR | 0.02 s | 5, 6 | details |
Code
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#define D(x) {x;}
#else
#define D(x)
#endif
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
using ll = long long;
using pii = pair<int, int>;
using vi = vector<int>;
const ll M = 1e9+7;
const int N = 5001;
string s;
int dp[N][N];
int lstpm[N], lsts[N];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin.exceptions(cin.failbit);
cin >> s;
int n = sz(s);
int fpm = -1, fs = -1;
for (int i = 0; i < sz(s); ++i) {
if (s[i] == '+' || s[i] == '-') fpm = i;
lstpm[i] = fpm;
if (s[i] == '*') fs = i;
lsts[i] = fs;
}
if (fpm == -1 && fs == -1) {
ll res = 0;
ll mu = 0;
for (int i = n-1; i >= 0; --i) {
mu *= 10;
mu += 1;
mu %= M;
res += ll(i+1) * (s[i]-'0') * mu % M;
res %= M;
}
cout << res << endl;
return 0;
}
ll res = 0;
for (int l = 0; l < n; ++l) {
if (s[l] >= '0' && s[l] <= '9') {
dp[l][l] = s[l]-'0';
res += dp[l][l];
}
}
for (int w = 2; w <= n; ++w) {
D(cout << w << endl);
for (int l = 0; l+w <= n; ++l) {
int r = l+w-1;
if (s[l] < '0' || s[l] > '9' || s[r] < '0' || s[r] > '9') continue;
int p = lstpm[r];
if (p >= l) {
ll sg = s[p] == '+' ? 1 : M-1;
dp[l][r] = (dp[l][p-1] + sg * dp[p+1][r]) % M;
goto done;
}
p = lsts[r];
if (p >= l) {
dp[l][r] = ll(dp[l][p-1]) * dp[p+1][r] % M;
goto done;
}
dp[l][r] = (10ll * dp[l][r-1] + dp[r][r]) %M;
done:
D(cout << s.substr(l, w) << " " << dp[l][r] << endl);
res += dp[l][r];
res %= M;
}
}
cout << res << endl;
}
Test details
Test 1
Group: 1, 2, 6
Verdict: ACCEPTED
| input |
|---|
| *3*7*5+67*2*7*12+38*4+9+2+1+45... |
| correct output |
|---|
| 665527462 |
| user output |
|---|
| 665527462 |
Test 2
Group: 1, 2, 6
Verdict: ACCEPTED
| input |
|---|
| 84149523195388144+1*8*5*1722+5... |
| correct output |
|---|
| 572374284 |
| user output |
|---|
| 572374284 |
Test 3
Group: 1, 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input |
|---|
| 347358248955243114242997746491... |
| correct output |
|---|
| 823495931 |
| user output |
|---|
| 823495931 |
Test 4
Group: 2, 6
Verdict: ACCEPTED
| input |
|---|
| +4976829*6+5+9*21+4*889+6*7+4*... |
| correct output |
|---|
| 503712700 |
| user output |
|---|
| 503712700 |
Test 5
Group: 2, 6
Verdict: ACCEPTED
| input |
|---|
| 862+83782+493135426+3152859674... |
| correct output |
|---|
| 624304680 |
| user output |
|---|
| 624304680 |
Test 6
Group: 2, 3, 4, 5, 6
Verdict: ACCEPTED
| input |
|---|
| 297736662651354417265929591745... |
| correct output |
|---|
| 625284593 |
| user output |
|---|
| 625284593 |
Test 7
Group: 6
Verdict: RUNTIME ERROR
| input |
|---|
| +9+1+8+92*761+68*983*1+7*1+1*2... |
| correct output |
|---|
| 947469815 |
| user output |
|---|
| (empty) |
Test 8
Group: 6
Verdict: RUNTIME ERROR
| input |
|---|
| 97831833*7+4229897789494398634... |
| correct output |
|---|
| 173934151 |
| user output |
|---|
| (empty) |
Test 9
Group: 3, 4, 5, 6
Verdict: ACCEPTED
| input |
|---|
| 777551563653223263644973172313... |
| correct output |
|---|
| 278364064 |
| user output |
|---|
| 278364064 |
Test 10
Group: 4, 6
Verdict: RUNTIME ERROR
| input |
|---|
| +481+4+66+2+26+7+5+97+6+4+3+14... |
| correct output |
|---|
| 244847224 |
| user output |
|---|
| (empty) |
Test 11
Group: 4, 6
Verdict: RUNTIME ERROR
| input |
|---|
| +8858717+53+6927+314+742552843... |
| correct output |
|---|
| 928369840 |
| user output |
|---|
| (empty) |
Test 12
Group: 5, 6
Verdict: RUNTIME ERROR
| input |
|---|
| *7*75*59*7*9*74*4*18211*31*1*7... |
| correct output |
|---|
| 219382651 |
| user output |
|---|
| (empty) |
Test 13
Group: 5, 6
Verdict: RUNTIME ERROR
| input |
|---|
| 73171*3438*9*34165158853*375*7... |
| correct output |
|---|
| 451362612 |
| user output |
|---|
| (empty) |
