Language: C++

#include <bits/stdc++.h>
using namespace std;

#define INF_LL (int64)1e18
#define INF (int32)1e9
#define REP(i, n) for(int64 i = 0;i < (n);i++)
#define FOR(i, a, b) for(int64 i = (a);i < (b);i++)
#define all(x) x.begin(),x.end()
#define fs first
#define sc second

using int32 = int_fast32_t;
using uint32 = uint_fast32_t;
using int64 = int_fast64_t;
using uint64 = uint_fast64_t;
using PII = pair<int32, int32>;
using PLL = pair<int64, int64>;

const double eps = 1e-10;

template<typename A, typename B>inline void chmin(A &a, B b){if(a > b) a = b;}
template<typename A, typename B>inline void chmax(A &a, B b){if(a < b) a = b;}

template<typename T>
vector<T> make_v(size_t a){return vector<T>(a);}

template<typename T,typename... Ts>
auto make_v(size_t a,Ts... ts){
	return vector<decltype(make_v<T>(ts...))>(a,make_v<T>(ts...));
}

template<typename T,typename U,typename... V>
typename enable_if<is_same<T, U>::value!=0>::type
fill_v(U &u,const V... v){u=U(v...);}

template<typename T,typename U,typename... V>
typename enable_if<is_same<T, U>::value==0>::type
fill_v(U &u,const V... v){
	for(auto &e:u) fill_v<T>(e,v...);
}

int64 N, P;
int64 mpow(int64 a, int64 b) {
  if (b == 0) return 1;
  if (b % 2) return a * mpow(a, b-1)%P;
  int64 ret = mpow(a, b/2);
  return ret*ret%P;
}

int main(void) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  string s;
  P1 = 3; P2 = 673;
  cin >> s;
  int64 now1 = 0, now2 = 0, res = 0;
  map<pair<int64, int64>, int64> cnt;
  cnt[{0, 0}]++;
  int64 div = 1;
  int64 d101 = mpow(10%P1, P1-2);
  int64 d102 = mpow(10%P2, P2-2);
  REP(i, s.size()) {
    now1 = now1 * 10 + s[i]-'0';
    now2 = now2 * 10 + s[i]-'0';

    now1 %= P1; now2 %= P2;
    res += cnt[{now*mpow(d101, i)%P1, now*mpow(d102, i)%P2}];
    cnt[{now*mpow(d101, i)%P1, now*mpow(d102, i)%P2}]++;
  }
  cout << res << endl;
}


Compiler output:
a.cc: In function 'int main()':
a.cc:54:3: error: 'P1' was not declared in this scope; did you mean 'y1'?
   54 |   P1 = 3; P2 = 673;
      |   ^~
      |   y1
a.cc:54:11: error: 'P2' was not declared in this scope; did you mean 'P'?
   54 |   P1 = 3; P2 = 673;
      |           ^~
      |           P
a.cc:67:17: error: 'now' was not declared in this scope; did you mean 'now2'?
   67 |     res += cnt[{now*mpow(d101, i)%P1, now*mpow(d102, i)%P2}];
      |                 ^~~
      |                 now2
a.cc:67:15: error: no match for 'operator[]' (operand types are 'std::map<std::pair<long int, long int>, long int>' and '<brace-enclosed initializer list>')
   67 |     res += cnt[{now*mpow(d101, i)%P1, now*mpow(d102, i)%P2}];
      |               ^
In file included from /usr/include/c++/14/map:63,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:152,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_map.h:504:7: note: candidate: 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::pair<long int, long int>; _Tp = long int; _Compare = std::less<std::pair<long int, long int> >; _Alloc = std::allocator<std::pair<const std::pair<long int, long int>, long int> >; mapped_type = long int; key_type = std::pair<long int, long int>]'
  504 |       operator[](const key_type& __k)
      |       ^~~~~~~~
/usr/include/c++/14/bits/stl_map.h:504:34: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const std::map<std::pair<long int, long int>, long int>::key_type&' {aka 'const std::pair<long int, long int>&'}
  504 |       operator[](const key_type& __k)
      |                  ~~~~~~~~~~~~~~~~^~~
/usr/include/c++/14/bits/stl_map.h:524:7: note: candidate: 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](key_type&&) [with _Key = std::pair<long int, long int>; _Tp = long int; _Compare = std::less<std::pair<long int, long int> >; _Alloc = std::allocator<std::pair<const std::pair<long int, long int>, long int> >; mapped_type = long int; key_type = std::pair<long int, long int>]'
  524 |       operator[](key_type&& __k)
      |       ^~~~~~~~
/usr/include/c++/14/bits/stl_map.h:524:29: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::map<std::pair<long int, long int>, long int>::key_type&&' {aka 'std::pair<long int, long int>&&'}
  524 |       operator[](key_type&& __k)
      |                  ~~~~~~~~~~~^~~
a.cc:68:8: error: no match for 'operator[]' (operand types are 'std::map<std::pair<long int, long int>, long int>' and '<brace-enclosed initializer list>')
   68 |     cnt[{now*mpow(d101, i)%P1, now*mpow(d102, i)%P2}]++;
      |        ^
/usr/include/c++/14/bits/stl_map.h:504:7: note: candidate: 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::pair<long int, long int>; _Tp = long int; _Compare = std::less<std::pair<long int, long int> >; _Alloc = std::allocator<std::pair<const std::pair<long int, long int>, long int> >; mapped_type = long int; key_type = std::pair<long int, long int>]'
  504 |       operator[](const key_type& __k)
      |       ^~~~~~~~
/usr/include/c++/14/bits/stl_map.h:504:34: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const std::map<std::pair<long int, long int>, long int>::key_type&' {aka 'const std::pair<long int, long int>&'}
  504 |       operator[](const key_type& __k)
      |                  ~~~~~~~~~~~~~~~~^~~
/usr/include/c++/14/bits/stl_map.h:524:7: note: candidate: 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](key_type&&) [with _Key = std::pair<long int, long int>; _Tp = long int; _Compare = std::less<std::pair<long int, long int> >; _Alloc = std::allocator<std::pair<const std::pair<long int, long int>, long int> >; mapped_type = long int; key_type = std::pair<long int, long int>]'
  524 |       operator[](key_type&& __k)
      |       ^~~~~~~~
/usr/include/c++/14/bits/stl_map.h:524:29: note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'std::map<std::pair<long int, long int>, long int>::key_type&&' {aka 'std::pair<long int, long int>&&'}
  524 |       operator[](key_type&& __k)
      |                  ~~~~~~~~~~~^~~