Problem p03287 (C++)

Buggy submission (status: Runtime Error):
// https://atcoder.jp/contests/abc105/tasks/abc105_d
#include <bits/stdc++.h>
using namespace std;
using ll = long long int;

#define REP(i, n) FOR(i, 0, n)
#define FOR(i, s, n) for (int i = (s), i##_len = (n); i < i##_len; ++i)
#define isvisiblechar(c) (0x21 <= (c) && (c) <= 0x7E)
#define cin scanner
#define cout printer
namespace {
class MaiScanner {
public:
  template <typename T> void input_integer(T &var) {
    var = 0;
    T sign = 1;
    int cc = getchar_unlocked();
    for (; cc < '0' || '9' < cc; cc = getchar_unlocked())
      if (cc == '-')
        sign = -1;
    for (; '0' <= cc && cc <= '9'; cc = getchar_unlocked())
      var = (var << 3) + (var << 1) + cc - '0';
    var = var * sign;
  }
  inline int c() { return getchar_unlocked(); }
  inline MaiScanner &operator>>(int &var) {
    input_integer<int>(var);
    return *this;
  }
  inline MaiScanner &operator>>(long long &var) {
    input_integer<long long>(var);
    return *this;
  }
  inline MaiScanner &operator>>(string &var) {
    int cc = getchar_unlocked();
    for (; !isvisiblechar(cc); cc = getchar_unlocked())
      ;
    for (; isvisiblechar(cc); cc = getchar_unlocked())
      var.push_back(cc);
    return *this;
  }
  template <typename IT> void in(IT begin, IT end) {
    for (auto it = begin; it != end; ++it)
      *this >> *it;
  }
};
class MaiPrinter {
public:
  template <typename T> void output_integer(T var) {
    if (var == 0) {
      putchar_unlocked('0');
      return;
    }
    if (var < 0)
      putchar_unlocked('-'), var = -var;
    char stack[32];
    int stack_p = 0;
    while (var)
      stack[stack_p++] = '0' + (var % 10), var /= 10;
    while (stack_p)
      putchar_unlocked(stack[--stack_p]);
  }
  inline MaiPrinter &operator<<(char c) {
    putchar_unlocked(c);
    return *this;
  }
  inline MaiPrinter &operator<<(int var) {
    output_integer<int>(var);
    return *this;
  }
  inline MaiPrinter &operator<<(long long var) {
    output_integer<long long>(var);
    return *this;
  }
  inline MaiPrinter &operator<<(char *str_p) {
    while (*str_p)
      putchar_unlocked(*(str_p++));
    return *this;
  }
  inline MaiPrinter &operator<<(const string &str) {
    const char *p = str.c_str();
    const char *l = p + str.size();
    while (p < l)
      putchar_unlocked(*p++);
    return *this;
  }
  template <typename IT> void join(IT begin, IT end, char sep = ' ') {
    for (bool b = 0; begin != end; ++begin, b = 1)
      b ? *this << sep << *begin : *this << *begin;
  }
};
} // namespace
MaiScanner scanner;
MaiPrinter printer;

int main(void) {
  int N, M, t;
  cin >> N >> M;
  // A[left, right) が M の倍数
  vector<int> cnt(M);
  cnt[0]++;
  ll sum = 0, ans = 0;
  REP(i, N) {
    cin >> t;
    sum += t;
    ans += (cnt[sum % M]++);
  }
  cout << ans << '\n';

  return 0;
}


Fixed submission:
// https://atcoder.jp/contests/abc105/tasks/abc105_d
#include <bits/stdc++.h>
using namespace std;
using ll = long long int;

#define REP(i, n) FOR(i, 0, n)
#define FOR(i, s, n) for (int i = (s), i##_len = (n); i < i##_len; ++i)
#define isvisiblechar(c) (0x21 <= (c) && (c) <= 0x7E)
#define cin scanner
#define cout printer
namespace {
class MaiScanner {
public:
  template <typename T> void input_integer(T &var) {
    var = 0;
    T sign = 1;
    int cc = getchar_unlocked();
    for (; cc < '0' || '9' < cc; cc = getchar_unlocked())
      if (cc == '-')
        sign = -1;
    for (; '0' <= cc && cc <= '9'; cc = getchar_unlocked())
      var = (var << 3) + (var << 1) + cc - '0';
    var = var * sign;
  }
  inline int c() { return getchar_unlocked(); }
  inline MaiScanner &operator>>(int &var) {
    input_integer<int>(var);
    return *this;
  }
  inline MaiScanner &operator>>(long long &var) {
    input_integer<long long>(var);
    return *this;
  }
  inline MaiScanner &operator>>(string &var) {
    int cc = getchar_unlocked();
    for (; !isvisiblechar(cc); cc = getchar_unlocked())
      ;
    for (; isvisiblechar(cc); cc = getchar_unlocked())
      var.push_back(cc);
    return *this;
  }
  template <typename IT> void in(IT begin, IT end) {
    for (auto it = begin; it != end; ++it)
      *this >> *it;
  }
};
class MaiPrinter {
public:
  template <typename T> void output_integer(T var) {
    if (var == 0) {
      putchar_unlocked('0');
      return;
    }
    if (var < 0)
      putchar_unlocked('-'), var = -var;
    char stack[32];
    int stack_p = 0;
    while (var)
      stack[stack_p++] = '0' + (var % 10), var /= 10;
    while (stack_p)
      putchar_unlocked(stack[--stack_p]);
  }
  inline MaiPrinter &operator<<(char c) {
    putchar_unlocked(c);
    return *this;
  }
  inline MaiPrinter &operator<<(int var) {
    output_integer<int>(var);
    return *this;
  }
  inline MaiPrinter &operator<<(long long var) {
    output_integer<long long>(var);
    return *this;
  }
  inline MaiPrinter &operator<<(char *str_p) {
    while (*str_p)
      putchar_unlocked(*(str_p++));
    return *this;
  }
  inline MaiPrinter &operator<<(const string &str) {
    const char *p = str.c_str();
    const char *l = p + str.size();
    while (p < l)
      putchar_unlocked(*p++);
    return *this;
  }
  template <typename IT> void join(IT begin, IT end, char sep = ' ') {
    for (bool b = 0; begin != end; ++begin, b = 1)
      b ? *this << sep << *begin : *this << *begin;
  }
};
} // namespace
MaiScanner scanner;
MaiPrinter printer;

int main(void) {
  int N, M, t;
  cin >> N >> M;
  // A[left, right) が M の倍数
  unordered_map<int, int> cnt;
  cnt[0]++;
  ll sum = 0, ans = 0;
  REP(i, N) {
    cin >> t;
    sum += t;
    ans += (cnt[sum % M]++);
  }
  cout << ans << '\n';

  return 0;
}