Problem p02903 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <array>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <deque>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <string>
#include <vector>

// using namespace std;

#define Rep(i, a, b) for (int i = a; i < b; i++)
#define rep(i, b) Rep(i, 0, b)
#define allof(a) (a).begin(), (a).end()

typedef long long ll;
const int inf = 1e9 + 7;
const ll infll = 1ll << 60ll;
const ll mod = 1e9 + 7;
// 0~3までは右左下上 4~7までは斜め
constexpr int dx[] = {1, 0, -1, 0, 1, 1, -1, -1};
constexpr int dy[] = {0, -1, 0, 1, 1, -1, -1, 1};

template <typename T> void chmax(T &a, T b) { a = std::max(a, b); }
template <typename T> void chmin(T &a, T b) { a = std::min(a, b); }
template <typename T> void chadd(T &a, T b) { a = a + b; }

namespace { // 名前なし名前空間
// 最大公約数
ll gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

// 最小公倍数
ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
} // namespace

int main() {
  int h, w, a, b;
  std::cin >> h >> w >> b >> a;

  std::vector<std::vector<int>> ans(h, std::vector<int>(w));

  // 逆説的に解ける？
  // 一行目の少ないほうを 0 とし， ans[0][0~a] = 0 とする
  rep(j, a) ans[0][j] = 0;
  Rep(j, a, w) ans[0][j] = 1;

  int overA = 0;
  rep(i, h) {
    if (i >= a)
      overA = 1;
    int overB = 0;
    rep(j, w) {
      if (j >= b)
        overB = 1;
      int cnt = overA + overB;
      ans[i][j] = cnt % 2;
    }
  }

  rep(i, h) {
    rep(j, w) { std::cout << ans[i][j]; }
    std::cout << std::endl;
  }

  return 0;
}


Fixed submission:
#include <algorithm>
#include <array>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <deque>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdio.h>
#include <string>
#include <vector>

// using namespace std;

#define Rep(i, a, b) for (int i = a; i < b; i++)
#define rep(i, b) Rep(i, 0, b)
#define allof(a) (a).begin(), (a).end()

typedef long long ll;
const int inf = 1e9 + 7;
const ll infll = 1ll << 60ll;
const ll mod = 1e9 + 7;
// 0~3までは右左下上 4~7までは斜め
constexpr int dx[] = {1, 0, -1, 0, 1, 1, -1, -1};
constexpr int dy[] = {0, -1, 0, 1, 1, -1, -1, 1};

template <typename T> void chmax(T &a, T b) { a = std::max(a, b); }
template <typename T> void chmin(T &a, T b) { a = std::min(a, b); }
template <typename T> void chadd(T &a, T b) { a = a + b; }

namespace { // 名前なし名前空間
// 最大公約数
ll gcd(ll a, ll b) {
  if (b == 0)
    return a;
  return gcd(b, a % b);
}

// 最小公倍数
ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
} // namespace

int main() {
  int h, w, a, b;
  std::cin >> h >> w >> b >> a;

  std::vector<std::vector<int>> ans(h, std::vector<int>(w));

  // 逆説的に解ける？
  // 一行目の少ないほうを 0 とし， ans[0][0~a] = 0 とする

  int overA = 0;
  rep(i, h) {
    if (i >= a)
      overA = 1;
    int overB = 0;
    rep(j, w) {
      if (j >= b)
        overB = 1;
      int cnt = overA + overB;
      ans[i][j] = cnt % 2;
    }
  }

  rep(i, h) {
    rep(j, w) { std::cout << ans[i][j]; }
    std::cout << std::endl;
  }

  return 0;
}