Problem p04012 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <map>
#include <sstream>
#include <string.h>
#include <string>
#include <vector>

using namespace std;

long long dp[3][100100] = {};
const long long INF = 1LL << 60;
#define MOD 1000000007

template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}

/**
 * @fn
 * 最大値を取ります.Vector<int>を渡すこと.
 */
long long int imax(vector<int> a) {
  int MAX = -10000000;
  for (int i = 0; i < a.size(); i++) {
    if (MAX < a.at(i))
      MAX = a.at(i);
  }
  return MAX;
}

/**
 * @fn
 * 最小値を取ります.Vector<int>を渡すこと.
 */
long long int imin(vector<int> a) {
  int MIN = 1000000000;
  for (int i = 0; i < a.size(); i++) {
    if (MIN > a.at(i))
      MIN = a.at(i);
  }
  return MIN;
}

long long int absmin(vector<int> a, long long int b) {
  int mini = 100000000;
  int d = 0;
  for (int i = 0; i < a.size(); i++) {
    if (mini > abs(a.at(i) - b)) {
      mini = abs(a.at(i) - b);
      d = i;
    }
  }
  return d;
}

int gcd(int a, int b) {
  if (a < b)
    swap(a, b);
  if (b < 1)
    return -1;
  if (a % b == 0)
    return b;
  return gcd(b, a % b);
}

// ここまでライブラリ
// ここから本文

long long int tpimin(vector<int> a) {
  int MIN = 1000000000;
  int number = 0;
  for (int i = 0; i < a.size(); i++) {
    if (MIN > a.at(i))
      MIN = a.at(i);
    number = i;
  }
  return number;
}

int main() {
  string s;
  vector<int> a(120);
  cin >> s;
  for (int i = 0; i < s.length(); i++) {
    a.at(s.at(i))++;
  }
  for (int i = 0; i < 120; i++) {
    if (a.at(i) % 2 != 0) {
      cout << "No" << endl;
      return 0;
    }
  }
  cout << "Yes" << endl;
}

Fixed submission:
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <map>
#include <sstream>
#include <string.h>
#include <string>
#include <vector>

using namespace std;

long long dp[3][100100] = {};
const long long INF = 1LL << 60;
#define MOD 1000000007

template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}

/**
 * @fn
 * 最大値を取ります.Vector<int>を渡すこと.
 */
long long int imax(vector<int> a) {
  int MAX = -10000000;
  for (int i = 0; i < a.size(); i++) {
    if (MAX < a.at(i))
      MAX = a.at(i);
  }
  return MAX;
}

/**
 * @fn
 * 最小値を取ります.Vector<int>を渡すこと.
 */
long long int imin(vector<int> a) {
  int MIN = 1000000000;
  for (int i = 0; i < a.size(); i++) {
    if (MIN > a.at(i))
      MIN = a.at(i);
  }
  return MIN;
}

long long int absmin(vector<int> a, long long int b) {
  int mini = 100000000;
  int d = 0;
  for (int i = 0; i < a.size(); i++) {
    if (mini > abs(a.at(i) - b)) {
      mini = abs(a.at(i) - b);
      d = i;
    }
  }
  return d;
}

int gcd(int a, int b) {
  if (a < b)
    swap(a, b);
  if (b < 1)
    return -1;
  if (a % b == 0)
    return b;
  return gcd(b, a % b);
}

// ここまでライブラリ
// ここから本文

long long int tpimin(vector<int> a) {
  int MIN = 1000000000;
  int number = 0;
  for (int i = 0; i < a.size(); i++) {
    if (MIN > a.at(i))
      MIN = a.at(i);
    number = i;
  }
  return number;
}

int main() {
  string s;
  vector<int> a(170);
  cin >> s;
  for (int i = 0; i < s.length(); i++) {
    a.at(s.at(i))++;
  }
  for (int i = 0; i < 120; i++) {
    if (a.at(i) % 2 != 0) {
      cout << "No" << endl;
      return 0;
    }
  }
  cout << "Yes" << endl;
}