#include<bits/stdc++.h>
using namespace std;
void convert(string &a, vector<int> &A){
for(auto c:a) A.push_back(c-'0');
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
vector<int> A, B, C;
string a, b, c;
cin >> a >> b >> c;
convert(a, A);
convert(b, B);
convert(c, C);
vector<int> P(A.size()+1);
P[0] = 0;
for(int i=1; i<P.size(); i++){
if(A[i-1] + B[i-1] > 10) P[i] = P[i-1] + 1;
else P[i] = P[i-1];
}
int p = A.size()-1, q = A.size()-1;
long long res = 0;
int r = 0;
while(p >= 0){
while(p >= 0 && (A[p] + B[p])%10 != C[p]) p--;
if(p < 0) break;
q = min(p - 1, q);
r = (A[p] + B[p])/10;
while(q >= 0 && (A[q]+B[q]+r)%10 == C[q]){
r = (A[q]+B[q]+r)/10;
q--;
}
//cerr << p << " " << q << "\n";
res += p-q - P[p+1] + P[q+1];
//cerr << res << "\n";
p--;
}
cout << res << "\n";
}
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 36 37 38 39 40 41 42 43 44 45 | #include<bits/stdc++.h> using namespace std; void convert(string &a, vector<int> &A){ for(auto c:a) A.push_back(c-'0'); } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); vector<int> A, B, C; string a, b, c; cin >> a >> b >> c; convert(a, A); convert(b, B); convert(c, C); vector<int> P(A.size()+1); P[0] = 0; for(int i=1; i<P.size(); i++){ if(A[i-1] + B[i-1] > 10) P[i] = P[i-1] + 1; else P[i] = P[i-1]; } int p = A.size()-1, q = A.size()-1; long long res = 0; int r = 0; while(p >= 0){ while(p >= 0 && (A[p] + B[p])%10 != C[p]) p--; if(p < 0) break; q = min(p - 1, q); r = (A[p] + B[p])/10; while(q >= 0 && (A[q]+B[q]+r)%10 == C[q]){ r = (A[q]+B[q]+r)/10; q--; } //cerr << p << " " << q << "\n"; res += p-q - P[p+1] + P[q+1]; //cerr << res << "\n"; p--; } cout << res << "\n"; } |
English