Problem p02726 (C++) — buggy submission, verdict: Time Limit Exceeded

#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;
const int MAX = 510000;
const int INF = 2000000000;
const int MOD = 1000000007;
// 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); }

long long fac[MAX], finv[MAX], inv[MAX];

// 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() {
  int a[2020][2020];
  REP(i, 2020) REP(j, 2020) a[i][j] = INF;
  // COMinit();
  int n, x, y;
  cin >> n >> x >> y;
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      if (j == i + 1)
        a[i][j] = 1;
      else if (j >= y && i <= x)
        a[i][j] = j - y + x - i + 1;
      else if (j < y && i > x)
        a[i][j] = min(j - i, y - x - (j - i) + 1);
      else
        a[i][j] = min(abs(j - y) + 1 + abs(i - x), j - i);
      // cout<<"i:"<<i<<"j:"<<j<<"|"<<a[i][j]<<endl;
    }
  }
  int k[n];
  REP(i, n) k[i] = 0;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++)
      k[a[i][j]]++;
  for (int i = 1; i < n; i++)
    cout << k[i] << endl;
}

Error: TLE

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;
const int MAX = 510000;
const int INF = 2000000000;
const int MOD = 1000000007;
// 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); }

long long fac[MAX], finv[MAX], inv[MAX];

// 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() {
  int a[2020][2020];
  REP(i, 2020) REP(j, 2020) a[i][j] = INF;
  // COMinit();
  int n, x, y;
  cin >> n, x, y;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      if (j = i + 1)
        a[i][j] = 1;
      else if (j >= y && i <= x)
        a[i][j] = j - y + i - x + 1;
      else if (j < y && i > x)
        a[i][j] = min(j - i, y - x - (j - i) + 1);
      else
        a[i][j] = min(abs(j - y) + 1 + abs(i - x), j - i);
    }
  int k[n];
  REP(i, n) k[i] = 0;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++)
      k[a[i][j]]++;
  for (int i = 1; i < n; i++)
    cout << k[i] << endl;
}