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

#include <algorithm>     //sort,二分探索,など
#include <bitset>        //固定長bit集合
#include <cmath>         //pow,logなど
#include <complex>       //複素数
#include <deque>         //両端アクセスのキュー
#include <functional>    //sortのgreater
#include <iomanip>       //setprecision(浮動小数点の出力の誤差)
#include <iostream>      //入出力
#include <iterator>      //集合演算(積集合,和集合,差集合など)
#include <map>           //map(辞書)
#include <numeric>       //iota(整数列の生成),gcdとlcm(c++17)
#include <queue>         //キュー
#include <set>           //集合
#include <stack>         //スタック
#include <string>        //文字列
#include <unordered_map> //イテレータあるけど順序保持しないmap
#include <unordered_set> //イテレータあるけど順序保持しないset
#include <utility>       //pair
#include <vector>        //可変長配列

// vectorの重複削除
// std::sort(test.begin(), test.end());
// test.erase(std::unique(test.begin(), test.end()), test.end());

using namespace std;
using ll = long long;
using P = pair<int, int>; // vector<P> ba(n); みたいな感じですぐ使える ba[i] =
                          // P(a, b); make_pairをしなくてもいい
// typedef vector<int> v;
template <class T> ostream &operator<<(ostream &o, const vector<T> &v) {
  o << "{";
  for (int i = 0; i < (int)v.size(); i++)
    o << (i > 0 ? ", " : "") << v[i];
  o << "}";
  return o;
}
#define debug(v)                                                               \\
  { cerr << "\\033[1;36m[debug]\\033[m " << #v << " : " << v << endl; }
#define rep(i, c) for (int i = 0; i < int(c); i++)
#define ALL(x) (x).begin(), (x).end() // sort(ALL(obj))みたいな
#define SIZE(x) ((ll)(x).size())      // sizeをsize_tからllに直しておく
#define MAX(x) *max_element(ALL(x))   // 最大値
#define pb push_back                  //
// const int MOD = 1000000007;
// string alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// printf("%.20f\\n", ans); あれ
// const double PI = 3.141592653589793238462643383;
int n;
int ii;
int jj;
int mm;

int check(int num) {
  mm = sqrt(num);
  int cnt = 0;
  for (int i = 1; i <= mm; i++) {
    // ii = i*i;
    // if (6*ii > num) break;

    for (int j = 1; j <= mm; j++) {
      // jj = j*j;
      // if (ii + 3*jj + 2*i*j > num) break;

      for (int k = 1; k <= mm; k++) {
        // if (ii + jj + k*k + i*j + j*k + i*k > num) break;
        if (i * i + j * j + k * k + i * j + j * k + i * k == num) {
          // if (i != j && i != k && j != k) return 6;
          // if (i == j && i == k) return 1;
          cnt++;
          // return 3;
        }
      }
    }
  }
  // return 0;
  return cnt;
}

int main() {
  cin >> n;
  // int a;
  for (int l = 1; l <= n; l++) {
    // cout << check(l) << endl;
    // int a = check(l);
    printf("%d\\n", check(l));
  }
  // int mm = sqrt(2);
  // cout << mm << endl;
}


Error: TLE

Fixed submission:

#include <algorithm>     //sort,二分探索,など
#include <bitset>        //固定長bit集合
#include <cmath>         //pow,logなど
#include <complex>       //複素数
#include <deque>         //両端アクセスのキュー
#include <functional>    //sortのgreater
#include <iomanip>       //setprecision(浮動小数点の出力の誤差)
#include <iostream>      //入出力
#include <iterator>      //集合演算(積集合,和集合,差集合など)
#include <map>           //map(辞書)
#include <numeric>       //iota(整数列の生成),gcdとlcm(c++17)
#include <queue>         //キュー
#include <set>           //集合
#include <stack>         //スタック
#include <string>        //文字列
#include <unordered_map> //イテレータあるけど順序保持しないmap
#include <unordered_set> //イテレータあるけど順序保持しないset
#include <utility>       //pair
#include <vector>        //可変長配列

// vectorの重複削除
// std::sort(test.begin(), test.end());
// test.erase(std::unique(test.begin(), test.end()), test.end());

using namespace std;
using ll = long long;
using P = pair<int, int>; // vector<P> ba(n); みたいな感じですぐ使える ba[i] =
                          // P(a, b); make_pairをしなくてもいい
// typedef vector<int> v;
template <class T> ostream &operator<<(ostream &o, const vector<T> &v) {
  o << "{";
  for (int i = 0; i < (int)v.size(); i++)
    o << (i > 0 ? ", " : "") << v[i];
  o << "}";
  return o;
}
#define debug(v)                                                               \\
  { cerr << "\\033[1;36m[debug]\\033[m " << #v << " : " << v << endl; }
#define rep(i, c) for (int i = 0; i < int(c); i++)
#define ALL(x) (x).begin(), (x).end() // sort(ALL(obj))みたいな
#define SIZE(x) ((ll)(x).size())      // sizeをsize_tからllに直しておく
#define MAX(x) *max_element(ALL(x))   // 最大値
#define pb push_back                  //
// const int MOD = 1000000007;
// string alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
// printf("%.20f\\n", ans); あれ
// const double PI = 3.141592653589793238462643383;
int n;
int ii;
int jj;

int check(int num) {
  for (int i = 1; i <= num; i++) {
    ii = i * i;
    if (6 * i * i > num)
      break;

    for (int j = i; j <= num; j++) {
      jj = j * j;
      if (ii + 3 * jj + 2 * i * j > num)
        break;

      for (int k = j; k <= num; k++) {

        if (ii + jj + k * k + i * j + j * k + i * k == num) {
          if (i != j && i != k && j != k)
            return 6;
          if (i == j && i == k)
            return 1;
          return 3;
        }
      }
    }
  }
  return 0;
}

int main() {
  cin >> n;
  for (int l = 1; l <= n; l++) {
    printf("%d\\n", check(l));
  }
}