1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <queue>
using namespace std;
int main() {
    cin.tie(0)->sync_with_stdio(0);
    string a1,a2,s;
    cin >> a1 >> a2 >> s;
    for (auto&& c : a1)c-='0';
    for (auto&& c : a2)c-='0';
    for (auto&& c : s)c-='0';
    int e=s.size(),b=s.size();
    bool carry=0;
    queue<int> carries;
    long res=0;
    while (b>0) {
        --b;
        signed char sum = a1[b]+a2[b]+carry;
        bool oldcarry=carry;
        if ((carry=(sum>9))) sum-=10;
        if (sum==s[b]) {
            if (!carry)
                res+=e-b-carries.size();
        } else {
            if (oldcarry&&--sum<0) sum=9,carry=0;
            while(!carries.empty()) carries.pop();
            if (sum==s[b]) {
                if (!carry)
                    ++res;
                e=b+1;
            } else e=b,carry=0;
        }
        if (carry&&e>b) carries.push(b);
    }
    cout << res;
}