#pragma GCC optimize("O3,unroll-loops")
#include "bits/stdc++.h"
using namespace std;
#define rep(i,a,b) for(int i=(a); i<(b); ++i)
#define all(x) x.begin(),x.end()
#define sz(x) int(x.size())
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<vi> vvi;
const ll p1 = 51908241602414719;
const ll p2 = 68745442202597681;
ll nc2(ll n){
return n*(n-1)/2;
}
int main(){
cin.tie(NULL),ios::sync_with_stdio(false);
string a,b,c; cin >> a >> b >> c;
int n = sz(a);
reverse(all(a));
reverse(all(b));
reverse(all(c));
map<pair<ll,ll>,int> cnt;
cnt[{0,0}] = 1;
ll c1 = 0, c2 = 0, pow1 = 1, pow2 = 0;
rep(i,0,n){
int cval = (int(a[i]) + int(b[i]) - int(c[i]) - int('0'));
c1 = (c1 + pow1 * cval) % p1;
c1 = (c1 < 0 ? c1 + p1 : c1);
c2 = (c2 + pow2 * cval) % p2;
c2 = (c2 < 0 ? c2 + p2 : c2);
pow1 = pow1 * 10 % p1;
pow2 = pow2 * 10 % p2;
cnt[{c1, c2}]++;
}
ll ans = 0;
for(auto [k,v] : cnt) ans += nc2(v);
cout << ans << '\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 46 47 48 49 50 | #pragma GCC optimize("O3,unroll-loops") #include "bits/stdc++.h" using namespace std; #define rep(i,a,b) for(int i=(a); i<(b); ++i) #define all(x) x.begin(),x.end() #define sz(x) int(x.size()) typedef long long ll; typedef unsigned long long ull; typedef vector<int> vi; typedef vector<vi> vvi; const ll p1 = 51908241602414719; const ll p2 = 68745442202597681; ll nc2(ll n){ return n*(n-1)/2; } int main(){ cin.tie(NULL),ios::sync_with_stdio(false); string a,b,c; cin >> a >> b >> c; int n = sz(a); reverse(all(a)); reverse(all(b)); reverse(all(c)); map<pair<ll,ll>,int> cnt; cnt[{0,0}] = 1; ll c1 = 0, c2 = 0, pow1 = 1, pow2 = 0; rep(i,0,n){ int cval = (int(a[i]) + int(b[i]) - int(c[i]) - int('0')); c1 = (c1 + pow1 * cval) % p1; c1 = (c1 < 0 ? c1 + p1 : c1); c2 = (c2 + pow2 * cval) % p2; c2 = (c2 < 0 ? c2 + p2 : c2); pow1 = pow1 * 10 % p1; pow2 = pow2 * 10 % p2; cnt[{c1, c2}]++; } ll ans = 0; for(auto [k,v] : cnt) ans += nc2(v); cout << ans << '\n'; } |
English