Problem p03835 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <algorithm> // std::copy()
#include <cctype>    // std::isdigit()
#include <climits>   // INT_MIN
#include <cmath>
#include <cstdio>
#include <functional> // std::greater<T>()
#include <iostream>
#include <iterator> // std::back_inserter()
#include <numeric>  // accumulate(ALL(vec), 0)  0 は初期値
#include <string>
#include <utility> // std::swap()
#include <vector>
using namespace std;

#define ALL(obj) (obj).begin(), (obj).end()
#define REP(i, n) for (int i = 0; i < (int)(n); i++)   // 0 ~ n-1
#define REPN(i, n) for (int i = 1; i <= (int)(n); i++) // 1 ~ n
#define DESCEND greater<int>() // sort 降順 大きい順
#define UNIQUE(vec)                                                            \
  (vec).erase(unique(ALL((vec))), (vec).end()); // 必ずsortを行なってから
#define MIN(vec)                                                               \
  min_element(                                                                 \
      ALL((vec))) // イテレータのため、値を取り出すときは * を先頭につける
#define MAX(vec) max_element(ALL((vec)))
#define IDX(vec, element_iter) distance((vec).begin(), element_iter)
#define SUM(vec) accumulate(ALL((vec)), 0) // 0 は初期値
#define COPY(vec1, vec2)                                                       \
  copy(ALL(vec1),                                                              \
       back_inserter(                                                          \
           vec2)) // vec1をvec2にコピーする vec2は空にしておく必要あり
typedef long long ll;
typedef pair<int, int> pii;
const int MOD = 1000000007; // 1 000 000 007

int main() {
  cin.tie();
  ios::sync_with_stdio(false);

  // input
  int K, S;
  cin >> K >> S;

  // 0 ~ K
  int cnt = 0;
  for (int i = 0; i <= K; ++i) {
    for (int j = 0; j <= K; ++j) {
      for (int k = 0; k <= K; ++k) {
        if ((i + j + k) == S)
          cnt++;
      }
    }
  }
  cout << cnt << "\n";

  return 0;
}


Fixed submission:
#include <algorithm> // std::copy()
#include <cctype>    // std::isdigit()
#include <climits>   // INT_MIN
#include <cmath>
#include <cstdio>
#include <functional> // std::greater<T>()
#include <iostream>
#include <iterator> // std::back_inserter()
#include <numeric>  // accumulate(ALL(vec), 0)  0 は初期値
#include <string>
#include <utility> // std::swap()
#include <vector>
using namespace std;

#define ALL(obj) (obj).begin(), (obj).end()
#define REP(i, n) for (int i = 0; i < (int)(n); i++)   // 0 ~ n-1
#define REPN(i, n) for (int i = 1; i <= (int)(n); i++) // 1 ~ n
#define DESCEND greater<int>() // sort 降順 大きい順
#define UNIQUE(vec)                                                            \
  (vec).erase(unique(ALL((vec))), (vec).end()); // 必ずsortを行なってから
#define MIN(vec)                                                               \
  min_element(                                                                 \
      ALL((vec))) // イテレータのため、値を取り出すときは * を先頭につける
#define MAX(vec) max_element(ALL((vec)))
#define IDX(vec, element_iter) distance((vec).begin(), element_iter)
#define SUM(vec) accumulate(ALL((vec)), 0) // 0 は初期値
#define COPY(vec1, vec2)                                                       \
  copy(ALL(vec1),                                                              \
       back_inserter(                                                          \
           vec2)) // vec1をvec2にコピーする vec2は空にしておく必要あり
typedef long long ll;
typedef pair<int, int> pii;
const int MOD = 1000000007; // 1 000 000 007

int main() {
  cin.tie();
  ios::sync_with_stdio(false);

  // input
  int K, S;
  cin >> K >> S;

  // 0 ~ K
  int cnt = 0;
  for (int i = 0; i <= K; ++i) {
    for (int j = 0; j <= K; ++j) {
      int tmp = S - (i + j);
      if (0 <= tmp && tmp <= K)
        cnt++;
    }
  }
  cout << cnt << "\n";

  return 0;
}