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

#include "bits/stdc++.h"
#include <math.h>
#include <time.h>
using namespace std;
const long long mod = 1000000007;
#define ll long long
#define P pair<int, int>
#define dump(x)                                                                \\
  if (dbg) {                                                                   \\
    cout << #x << " = " << (x) << endl;                                        \\
  }
bool dbg = false;
long long gcd(long long a, long long b) {
  if (a % b == 0) {
    return (b);
  } else {
    return (gcd(b, a % b));
  }
}
long long lcm(long long a, long long b) { return (a / gcd(a, b)) * b; }
//---------------------------------------------------------------------------------------------------
/*ここからいじる*/
//---------------------------------------------------------------------------------------------------
int n, x, y;
vector<int> ans(2020);
void solve() {
  for (int i = 0; i < n - 1; i++) {
    for (int j = i + 1; j < n; j++) {
      int tmp;
      if (i < x && j <= x) { // あ→あ
        ans.at(j - i)++;
      } else if (i >= y && j > y) { // い→い
        ans.at(j - i)++;
      } else if (i <= x && j >= y) { // あ→い
        ans.at(j - i - (y - x) + 1)++;
      } else if (i <= x && j >= x && j <= y) { // あ→う
        tmp = min(j - i, y - j + 1 + (x - i));
        ans.at(tmp)++;
      } else if (i >= x && i <= y && j >= y) { // う→い
        tmp = min(j - i, i - x + 1 + (j - y));
        ans.at(tmp)++;
      } else { // う→う
        tmp = min(j - i, i - x + 1 + (y - j));
        ans.at(tmp)++;
      }
    }
  }
}
int main() {
  cin >> n >> x >> y;
  x--;
  y--;
  solve();
  for (int i = 0; i < n - 1; i++) {
    cout << ans.at(i + 1) << endl;
  }
  return 0;
}


Error: TLE

Fixed submission:

#include "bits/stdc++.h"
#include <math.h>
#include <time.h>
using namespace std;
const long long mod = 1000000007;
#define ll long long
#define P pair<int, int>
#define dump(x)                                                                \\
  if (dbg) {                                                                   \\
    cout << #x << " = " << (x) << endl;                                        \\
  }
bool dbg = false;
long long gcd(long long a, long long b) {
  if (a % b == 0) {
    return (b);
  } else {
    return (gcd(b, a % b));
  }
}
long long lcm(long long a, long long b) { return (a / gcd(a, b)) * b; }
//---------------------------------------------------------------------------------------------------
/*ここからいじる*/
//---------------------------------------------------------------------------------------------------
int n, x, y;
const long long INF = 1000000;
vector<vector<int>> d(2020, vector<int>(2020));
vector<int> ans(2020);
void warshall_Floyd() {
  for (int k = 0; k < n; k++) {
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        d.at(i).at(j) = min(d.at(i).at(j), d.at(i).at(k) + d.at(k).at(j));
      }
    }
  }
}
void solve() {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      d.at(i).at(j) = INF;
    }
  }
  for (int i = 0; i < n; i++) {
    d.at(i).at(i + 1) = 1;
    d.at(i + 1).at(i) = 1;
  }
  d.at(x).at(y) = 1;
  d.at(y).at(x) = 1;
  warshall_Floyd();
  for (int i = 0; i < n - 1; i++) {
    for (int j = i + 1; j < n; j++) {
      ans.at(d.at(i).at(j) - 1)++;
    }
  }
}
int main() {
  cin >> n >> x >> y;
  x--;
  y--;
  solve();
  for (int i = 0; i < n - 1; i++) {
    cout << ans.at(i) << endl;
  }
  return 0;
}