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

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
typedef long long ll;
static const int N = 2010;
static const int INFTY = (1 << 21);
int n, M[N][N];
int d[N];
map<int, int> mp;
// vector<int> mp(N, 0);

void bfs(int sv, int n, int X, int Y) {
  queue<int> q;
  q.push(sv);
  rep(i, N) d[i] = INFTY;
  d[sv] = 0;
  int u;
  while (!q.empty()) {
    u = q.front();
    q.pop();
    // for (int v = 0; v < N; v++){
    //     if (M[u][v] == 0) continue;
    //     if (d[v] != INFTY) continue;
    //     d[v] = d[u] + 1;
    //     q.push(v);
    // }
    if (u - 1 >= 1) {
      if (d[u - 1] == INFTY) {
        d[u - 1] = d[u] + 1;
        q.push(u - 1);
      }
    }
    if (u + 1 <= n) {
      if (d[u + 1] == INFTY) {
        d[u + 1] = d[u] + 1;
        q.push(u + 1);
      }
    }
    if (u == X) {
      if (d[Y] == INFTY) {
        d[Y] = d[u] + 1;
        q.push(Y);
      }
    }
    if (u == Y) {
      if (d[X] == INFTY) {
        d[X] = d[u] + 1;
        q.push(X);
      }
    }
  }

  rep(i, N) mp[d[i]]++;
}

int main() {

  int n, X, Y;
  cin >> n >> X >> Y;

  // rep(i, n){
  //     rep(j, n){
  //         M[i][j] = 0;
  //     }
  // }

  // for(int i = 1; i < n; i++){
  //     M[i-1][i] = 1;
  //     M[i][i-1] = 1;
  // }
  // M[X-1][Y-1] = 1;
  // M[Y-1][X-1] = 1;

  // rep(sv, n) bfs(sv, n, X, Y);
  for (int sv = 1; sv <= n; sv++) {
    bfs(sv, n, X, Y);
  }

  for (int i = 1; i < n; i++) {
    cout << mp[i] / 2 << endl;
  }

  return 0;
}

// #include <bits/stdc++.h>
// #define rep(i,n) for(int i = 0; i < (n); ++i)
// using namespace std;
// typedef long long ll;
// static const int N = 2010;
// static const int INFTY = (1<<21);
// int n, M[N][N];
// int d[N];
// map<int, int> mp;

// void bfs(int s){
//     queue<int> q;
//     q.push(s);
//     rep(i, N) d[i] = INFTY;
//     d[s] = 0;
//     int u;
//     while ( !q. empty() ){
//         u = q.front();
//         q.pop();
//         for (int v = 0; v < N; v++){
//             if (M[u][v] == 0) continue;
//             if (d[v] != INFTY) continue;
//             d[v] = d[u] + 1;
//             q.push(v);
//         }
//     }

//     rep(i, N) mp[d[i]]++;
// }

// int main(){

//     int n, X, Y;
//     cin >> n >> X >> Y;

//     int k;

//     rep(i, n){
//         if (i + k <= X - Y + N - 1) mp[k]++;
//         if (i + k < (X + Y) / 2) mp[k] ++;
//         if
//     }

//     // rep(i, n){
//     //     rep(j, n){
//     //         M[i][j] = 0;
//     //     }
//     // }

//     // for(int i = 1; i < n; i++){
//     //     M[i-1][i] = 1;
//     //     M[i][i-1] = 1;
//     // }
//     // M[X-1][Y-1] = 1;
//     // M[Y-1][X-1] = 1;

//     // rep(i, n) bfs(i);

//     // for(int i = 1; i < n; i++){
//     //     cout << mp[i] / 2 << endl;
//     // }

//     return 0;
// }


Error: TLE

Fixed submission:

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
typedef long long ll;
static const int N = 2010;
static const int INFTY = (1 << 21);
int n, M[N][N];
int d[N];
map<int, int> mp;

void bfs(int s) {
  queue<int> q;
  q.push(s);
  rep(i, N) d[i] = INFTY;
  d[s] = 0;
  int u;
  while (!q.empty()) {
    u = q.front();
    q.pop();
    for (int v = 0; v < N; v++) {
      if (M[u][v] == 0)
        continue;
      if (d[v] != INFTY)
        continue;
      d[v] = d[u] + 1;
      q.push(v);
    }
  }

  rep(i, N) mp[d[i]]++;
}

int main() {

  int n, X, Y;
  cin >> n >> X >> Y;

  rep(i, n) {
    rep(j, n) { M[i][j] = 0; }
  }

  for (int i = 1; i < n; i++) {
    M[i - 1][i] = 1;
    M[i][i - 1] = 1;
  }
  M[X - 1][Y - 1] = 1;
  M[Y - 1][X - 1] = 1;

  rep(i, n) bfs(i);

  for (int i = 1; i < n; i++) {
    cout << mp[i] / 2 << endl;
  }

  return 0;
}