Problem p03126 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <functional>
#include <iomanip>
#include <iostream>
#include <numeric>
#include <sstream>
#include <string>
#include <time.h>
#include <tuple>
#include <vector>
// #include "bits/stdc++.h"
using namespace std;
// using namespace std::vector;
#define rep(i, a, b) for (ll i = (a); i < (b); ++i)
// #define M_PI 3.1415926535
#define huge 1000000007
typedef long long int ll;
ll gcd(ll a, ll b);
ll bur(ll N, ll X);
bool IsPrime(int num);

int main(void) {

  ll N = 0;
  ll A = 0;
  ll B = 0;
  ll C = 0;
  ll D = 0;
  ll M = 0;
  ll K = 0;
  // ll T = 0;
  // ll M = 0;
  // ll h[400][400] = {};
  ll b[30][30] = {};
  ll c[30] = {};
  ll d[100] = {};

  // ll v[3] = {};
  // ll *c, *s, *n;
  string S[50], T[50], U[52];
  char fi[50], fv[50];

  ll count = 0;
  float count2 = 0;
  float sum = 0;
  ll min = 1000000000000;
  ll max = 1;
  ll dist1 = 0;
  ll dist2 = 0;
  ll dist3 = 0;
  ll now = 0;
  int tmax = 0;
  int tmax2 = 0;
  // int flag = 0;
  char temp, head;
  // int is = 0;
  bool start = false;

  // char p;

  float all = 0;
  ll leng = 1;
  ll state = 2;
  bool down = true;

  cin >> N >> M;

  vector<int> KK(N);

  rep(i, 0, N) {
    cin >> KK[i];
    rep(j, 0, KK[i]) { cin >> b[i][j]; }
  }

  rep(j, 0, N) {
    // cout << KK[j] << endl;
    rep(i, 0, KK[j]) {
      c[b[j][i]]++;
      // cout << b[j][i] << endl;
    }
  }
  rep(j, 0, M + 1) {
    // cout << c[j] << endl;
    if (c[j] == N)
      all++;
  }
  cout << all << endl;

  // cout << dist1-dist2 << endl;
  /*vector<pair<int,int>> tr(N);


  rep(i, 0, N) {
          cin >> tr[i].first;
          count += tr[i].first;
  }


  rep(i, 0, N) {
          cin >> tr[i].second;
          count2 += tr[i].second;
  }


  if (count < count2) {
          cout << -1 << endl;
          return 0;
  }

  rep(i, 0, N) {

          if (tr[i].first < tr[i].second) {
                  sum += tr[i].second - tr[i].first;
                  niku++;
          }
          else {
                  ov[all] += tr[i].first - tr[i].second;
                  all++;
          }

  }

  sort(ov.begin(), ov.end(), greater<>());

  int xx = 0;

  while (sum > 0) {

          sum -= ov[xx];
          xx++;
          niku++;
  }*/

  // cout << niku << endl;

  // x = (ll *)malloc((N+1) * sizeof(ll));
  // c = (ll *)malloc((N) * sizeof(ll));
  // cin >> D >> G;
  // vector<pair<int,int>> tr(M);
  // vector<pair<int,int>> qes(Q);
  // sort(c.begin(), c.end());

  // cout << c[2] - c[1] << endl;

  /*A = N / 1000;
  N %= 1000;
  B = N / 100;
  N %= 100;
  C = N / 10;
  N %= 10;
  D = N;*/

  // cin >> N >> M;

  // vector<pair<int,int>> c(M);
  ////vector<pair<int, int>> e(M);
  // vector<ll> d(M);

  // rep(i, 0, M) {
  //	cin >> c[i].first >> c[i].second;
  //	//e[i].first = c[i].first;
  //	//e[i].second = c[i].second;

  //}
  ////sort(c.begin(), c.end());

  //

  // rep(i, 0, M) {

  //
  //
  //	rep(j, 0, M) {
  //		if (c[i].first == c[j].first && c[j].second < c[i].second) {
  //			d[i]++;
  //			//cout << j << endl;
  //		}
  //	}
  //	cout << std::setfill('0') << std::right << std::setw(6) << c[i].first;
  //	cout << std::setfill('0') << std::right << std::setw(6) << d[i]+1 <<
  //endl;
  //}

  return 0;
}

ll bur(ll N, ll X) {
  ll pan = 1;
  ll pat = 1;
  ll burg = 0;

  if (X > burg) {
    if (N == 0)
      return pat;

    burg += pan;
    burg += bur(N - 1, X);
    burg += pat;
    burg += bur(N - 1, X);
    burg += pan;
  }

  return burg;
}

ll gcd(ll a, ll b) {

  /* 自然数 a > b を確認・入替 */
  if (a < b) {
    ll tmp = a;
    a = b;
    b = tmp;
  }
  ll x = b;
  ll y = a;
  /* ユークリッドの互除法 */
  ll r = a % b;
  while (r != 0) {
    a = b;
    b = r;
    r = a % b;
  }

  return y / b * x;
}

bool IsPrime(int num) {
  if (num < 2)
    return false;
  else if (num == 2)
    return true;
  else if (num % 2 == 0)
    return false; // 偶数はあらかじめ除く

  double sqrtNum = sqrt(num);
  for (int i = 3; i <= sqrtNum; i += 2) {
    if (num % i == 0) {
      // 素数ではない
      return false;
    }
  }

  // 素数である
  return true;
}

Fixed submission:
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <functional>
#include <iomanip>
#include <iostream>
#include <numeric>
#include <sstream>
#include <string>
#include <time.h>
#include <tuple>
#include <vector>
// #include "bits/stdc++.h"
using namespace std;
// using namespace std::vector;
#define rep(i, a, b) for (ll i = (a); i < (b); ++i)
// #define M_PI 3.1415926535
#define huge 1000000007
typedef long long int ll;
ll gcd(ll a, ll b);
ll bur(ll N, ll X);
bool IsPrime(int num);

int main(void) {

  ll N = 0;
  ll A = 0;
  ll B = 0;
  ll C = 0;
  ll D = 0;
  ll M = 0;
  ll K = 0;
  // ll T = 0;
  // ll M = 0;
  // ll h[400][400] = {};
  ll b[100][100] = {};
  ll c[100] = {};
  ll d[100] = {};

  // ll v[3] = {};
  // ll *c, *s, *n;
  string S[50], T[50], U[52];
  char fi[50], fv[50];

  ll count = 0;
  float count2 = 0;
  float sum = 0;
  ll min = 1000000000000;
  ll max = 1;
  ll dist1 = 0;
  ll dist2 = 0;
  ll dist3 = 0;
  ll now = 0;
  int tmax = 0;
  int tmax2 = 0;
  // int flag = 0;
  char temp, head;
  // int is = 0;
  bool start = false;

  // char p;

  float all = 0;
  ll leng = 1;
  ll state = 2;
  bool down = true;

  cin >> N >> M;

  vector<int> KK(N);

  rep(i, 0, N) {
    cin >> KK[i];
    rep(j, 0, KK[i]) { cin >> b[i][j]; }
  }

  rep(j, 0, N) {
    // cout << KK[j] << endl;
    rep(i, 0, KK[j]) {
      c[b[j][i]]++;
      // cout << b[j][i] << endl;
    }
  }
  rep(j, 0, M + 1) {
    // cout << c[j] << endl;
    if (c[j] == N)
      all++;
  }
  cout << all << endl;

  // cout << dist1-dist2 << endl;
  /*vector<pair<int,int>> tr(N);


  rep(i, 0, N) {
          cin >> tr[i].first;
          count += tr[i].first;
  }


  rep(i, 0, N) {
          cin >> tr[i].second;
          count2 += tr[i].second;
  }


  if (count < count2) {
          cout << -1 << endl;
          return 0;
  }

  rep(i, 0, N) {

          if (tr[i].first < tr[i].second) {
                  sum += tr[i].second - tr[i].first;
                  niku++;
          }
          else {
                  ov[all] += tr[i].first - tr[i].second;
                  all++;
          }

  }

  sort(ov.begin(), ov.end(), greater<>());

  int xx = 0;

  while (sum > 0) {

          sum -= ov[xx];
          xx++;
          niku++;
  }*/

  // cout << niku << endl;

  // x = (ll *)malloc((N+1) * sizeof(ll));
  // c = (ll *)malloc((N) * sizeof(ll));
  // cin >> D >> G;
  // vector<pair<int,int>> tr(M);
  // vector<pair<int,int>> qes(Q);
  // sort(c.begin(), c.end());

  // cout << c[2] - c[1] << endl;

  /*A = N / 1000;
  N %= 1000;
  B = N / 100;
  N %= 100;
  C = N / 10;
  N %= 10;
  D = N;*/

  // cin >> N >> M;

  // vector<pair<int,int>> c(M);
  ////vector<pair<int, int>> e(M);
  // vector<ll> d(M);

  // rep(i, 0, M) {
  //	cin >> c[i].first >> c[i].second;
  //	//e[i].first = c[i].first;
  //	//e[i].second = c[i].second;

  //}
  ////sort(c.begin(), c.end());

  //

  // rep(i, 0, M) {

  //
  //
  //	rep(j, 0, M) {
  //		if (c[i].first == c[j].first && c[j].second < c[i].second) {
  //			d[i]++;
  //			//cout << j << endl;
  //		}
  //	}
  //	cout << std::setfill('0') << std::right << std::setw(6) << c[i].first;
  //	cout << std::setfill('0') << std::right << std::setw(6) << d[i]+1 <<
  //endl;
  //}

  return 0;
}

ll bur(ll N, ll X) {
  ll pan = 1;
  ll pat = 1;
  ll burg = 0;

  if (X > burg) {
    if (N == 0)
      return pat;

    burg += pan;
    burg += bur(N - 1, X);
    burg += pat;
    burg += bur(N - 1, X);
    burg += pan;
  }

  return burg;
}

ll gcd(ll a, ll b) {

  /* 自然数 a > b を確認・入替 */
  if (a < b) {
    ll tmp = a;
    a = b;
    b = tmp;
  }
  ll x = b;
  ll y = a;
  /* ユークリッドの互除法 */
  ll r = a % b;
  while (r != 0) {
    a = b;
    b = r;
    r = a % b;
  }

  return y / b * x;
}

bool IsPrime(int num) {
  if (num < 2)
    return false;
  else if (num == 2)
    return true;
  else if (num % 2 == 0)
    return false; // 偶数はあらかじめ除く

  double sqrtNum = sqrt(num);
  for (int i = 3; i <= sqrtNum; i += 2) {
    if (num % i == 0) {
      // 素数ではない
      return false;
    }
  }

  // 素数である
  return true;
}