Problem p02792 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; i < n; i++)
#define REPR(i, n) for (int i = n; i >= 0; i--)
#define FOR(i, m, n) for (int i = m - 1; i < n; i++)
#define ALL(v) v.begin(), v.end()
#define chmax(x, y) (x = max(x, y))
#define chmin(x, y) (x = min(x, y))
#define FILL2D(A, c) fill(A[0], A[0] + sizeof(A) / sizeof(**A), c)
#define FILL3D(A, c) fill(A[0][0], A[0][0] + sizeof(A) / sizeof(***A), c)
// vector<vector<要素の型>> 変数名(要素数1, vector<要素の型>(要素数2, 初期値))
// vector<intなど> 変数名(要素数,初期値)
using namespace std;
typedef long long ll;
typedef long double ld;
const int MAX = 510000;
const int INF = 2000000000;
const int MOD = 1000000007;
long long fac[MAX], finv[MAX], inv[MAX];
// gcd,lcmセット
ll gcd(ll a, ll b) {
  if (a % b == 0)
    return b;
  else
    return gcd(b, a % b);
}
ll lcm(ll a, ll b) { return a * b / gcd(a, b); }
int pow_kai(int a, int n) { // aのn乗を計算します。
  int x = 1;
  while (n > 0) { // 全てのbitが捨てられるまで。
    if (n & 1) {  // 1番右のbitが1のとき。
      x = x * a;
    }
    a = a * a;
    n >>= 1; // bit全体を右に1つシフトして一番右を捨てる。
  }
  return x;
}
// a^n mod を計算する
long long modPow(long long a, long long n, long long mod) {
  long long res = 1;
  while (n > 0) {
    if (n & 1)
      res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}
// a^{-1} mod を計算する
ll modInv(ll a, ll mod) { return modPow(a, mod - 2, mod); }

// combinationのテーブルを作る前処理
void COMinit() {
  fac[0] = fac[1] = 1;
  finv[0] = finv[1] = 1;
  inv[1] = 1;
  for (int i = 2; i < MAX; i++) {
    fac[i] = fac[i - 1] * i % MOD;
    inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
    finv[i] = finv[i - 1] * inv[i] % MOD;
  }
}

// 二項係数計算

bool isPrime(ll x) {
  int i;
  if (x < 2)
    return false;
  else if (x == 2)
    return true;
  if (x % 2 == 0)
    return false;
  for (i = 3; i * i <= x; i += 2)
    if (x % i == 0)
      return false;
  return true;
}
// dfsではvector<vector<int>> g(n);で◎
int main() {
  // COMinit();
  // string a,b;
  ll n;
  cin >> n;
  ll t[10][10] = {0};
  ll cnt = 0;
  for (ll k = 1; k <= n; k++) {
    int e = k % 10;
    int f = k;
    while (f > 10)
      f /= 10;
    t[f][e]++;
  }
  /*REP(j,10){
      REP(i,10){
          cout<<t[j][i]<<" ";
      }
      cout<<endl;
  }*/
  for (int i = 1; i < 10; i++)
    for (int j = 1; j < 10; j++)
      cnt += t[i][j] * t[j][i];
  // 答え出力パート
  cout << cnt << endl;
}

Fixed submission:
#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; i < n; i++)
#define REPR(i, n) for (int i = n; i >= 0; i--)
#define FOR(i, m, n) for (int i = m - 1; i < n; i++)
#define ALL(v) v.begin(), v.end()
#define chmax(x, y) (x = max(x, y))
#define chmin(x, y) (x = min(x, y))
#define FILL2D(A, c) fill(A[0], A[0] + sizeof(A) / sizeof(**A), c)
#define FILL3D(A, c) fill(A[0][0], A[0][0] + sizeof(A) / sizeof(***A), c)
// vector<vector<要素の型>> 変数名(要素数1, vector<要素の型>(要素数2, 初期値))
// vector<intなど> 変数名(要素数,初期値)
using namespace std;
typedef long long ll;
typedef long double ld;
const int MAX = 510000;
const int INF = 2000000000;
const int MOD = 1000000007;
long long fac[MAX], finv[MAX], inv[MAX];
// gcd,lcmセット
ll gcd(ll a, ll b) {
  if (a % b == 0)
    return b;
  else
    return gcd(b, a % b);
}
ll lcm(ll a, ll b) { return a * b / gcd(a, b); }
int pow_kai(int a, int n) { // aのn乗を計算します。
  int x = 1;
  while (n > 0) { // 全てのbitが捨てられるまで。
    if (n & 1) {  // 1番右のbitが1のとき。
      x = x * a;
    }
    a = a * a;
    n >>= 1; // bit全体を右に1つシフトして一番右を捨てる。
  }
  return x;
}
// a^n mod を計算する
long long modPow(long long a, long long n, long long mod) {
  long long res = 1;
  while (n > 0) {
    if (n & 1)
      res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}
// a^{-1} mod を計算する
ll modInv(ll a, ll mod) { return modPow(a, mod - 2, mod); }

// combinationのテーブルを作る前処理
void COMinit() {
  fac[0] = fac[1] = 1;
  finv[0] = finv[1] = 1;
  inv[1] = 1;
  for (int i = 2; i < MAX; i++) {
    fac[i] = fac[i - 1] * i % MOD;
    inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
    finv[i] = finv[i - 1] * inv[i] % MOD;
  }
}

// 二項係数計算

bool isPrime(ll x) {
  int i;
  if (x < 2)
    return false;
  else if (x == 2)
    return true;
  if (x % 2 == 0)
    return false;
  for (i = 3; i * i <= x; i += 2)
    if (x % i == 0)
      return false;
  return true;
}
// dfsではvector<vector<int>> g(n);で◎
int main() {
  // COMinit();
  // string a,b;
  ll n;
  cin >> n;
  ll t[10][10] = {0};
  ll cnt = 0;
  for (ll k = 1; k <= n; k++) {
    int e = k % 10;
    int f = k;
    while (f > 9)
      f /= 10;
    t[f][e]++;
  }
  /*REP(j,10){
      REP(i,10){
          cout<<t[j][i]<<" ";
      }
      cout<<endl;
  }*/
  for (int i = 1; i < 10; i++)
    for (int j = 1; j < 10; j++)
      cnt += t[i][j] * t[j][i];
  // 答え出力パート
  cout << cnt << endl;
}