Problem p03422 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>

#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FORD(i, a, b) for (int i = (a); i >= (b); --i)
#define VAR(v, i) __typeof(i) v = (i)
#define FORE(i, c) for (VAR(i, (c).begin()); i != (c).end(); ++i)
#define all(v) (v).begin(), (v).end()

#define PII pair<int, int>
#define mp make_pair
#define st first
#define nd second
#define pb push_back
#define lint long long int
#define VI vector<int>

#define debug(x)                                                               \
  { cerr << #x << " = " << x << endl; }
#define debug2(x, y)                                                           \
  { cerr << #x << " = " << x << ", " << #y << " = " << y << endl; }
#define debug3(x, y, z)                                                        \
  {                                                                            \
    cerr << #x << " = " << x << ", " << #y << " = " << y << ", " << #z         \
         << " = " << z << endl;                                                \
  }
#define debugv(x)                                                              \
  {                                                                            \
    {                                                                          \
      cerr << #x << " = ";                                                     \
      FORE(itt, (x)) cerr << *itt << ", ";                                     \
      cerr << endl;                                                            \
    }                                                                          \
  }
#define debugt(t, n)                                                           \
  {                                                                            \
    {                                                                          \
      cerr << #t << " = ";                                                     \
      FOR(it, 0, (n)) cerr << t[it] << ", ";                                   \
      cerr << endl;                                                            \
    }                                                                          \
  }

#define make(x)                                                                \
  int(x);                                                                      \
  scanf("%d", &(x));
#define make2(x, y)                                                            \
  int(x), (y);                                                                 \
  scanf("%d%d", &(x), &(y));
#define make3(x, y, z)                                                         \
  int(x), (y), (z);                                                            \
  scanf("%d%d%d", &(x), &(y), &(z));
#define make4(x, y, z, t)                                                      \
  int(x), (y), (z), (t);                                                       \
  scanf("%d%d%d%d", &(x), &(y), &(z), &(t));
#define makev(v, n)                                                            \
  VI(v);                                                                       \
  FOR(i, 0, (n)) {                                                             \
    make(a);                                                                   \
    (v).pb(a);                                                                 \
  }
#define IOS ios_base::sync_with_stdio(0)
#define HEAP priority_queue

#define read(x) scanf("%d", &(x));
#define read2(x, y) scanf("%d%d", &(x), &(y));
#define read3(x, y, z) scanf("%d%d%d", &(x), &(y), &(z));
#define read4(x, y, z, t) scanf("%d%d%d%d", &(x), &(y), &(z), &(t));
#define readv(v, n)                                                            \
  FOR(i, 0, (n)) {                                                             \
    make(a);                                                                   \
    (v).pb(a);                                                                 \
  }

using namespace std;

int f(int a, int k) {
  if (a < k)
    return 0;
  if (a % k == 0)
    return (a / k);
  int r = a % k;
  int q = a / k;
  return f((k - 1) * q + (r - 1), k);
}

int main() {
  make(n);
  int ans = 0;
  FOR(i, 0, n) {
    make2(a, b);
    ans ^= f(a, b);
  }
  if (ans == 0)
    printf("Aoki\n");
  else
    printf("Takahashi\n");
}

Fixed submission:
#include <bits/stdc++.h>

#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FORD(i, a, b) for (int i = (a); i >= (b); --i)
#define VAR(v, i) __typeof(i) v = (i)
#define FORE(i, c) for (VAR(i, (c).begin()); i != (c).end(); ++i)
#define all(v) (v).begin(), (v).end()

#define PII pair<int, int>
#define mp make_pair
#define st first
#define nd second
#define pb push_back
#define lint long long int
#define VI vector<int>

#define debug(x)                                                               \
  { cerr << #x << " = " << x << endl; }
#define debug2(x, y)                                                           \
  { cerr << #x << " = " << x << ", " << #y << " = " << y << endl; }
#define debug3(x, y, z)                                                        \
  {                                                                            \
    cerr << #x << " = " << x << ", " << #y << " = " << y << ", " << #z         \
         << " = " << z << endl;                                                \
  }
#define debugv(x)                                                              \
  {                                                                            \
    {                                                                          \
      cerr << #x << " = ";                                                     \
      FORE(itt, (x)) cerr << *itt << ", ";                                     \
      cerr << endl;                                                            \
    }                                                                          \
  }
#define debugt(t, n)                                                           \
  {                                                                            \
    {                                                                          \
      cerr << #t << " = ";                                                     \
      FOR(it, 0, (n)) cerr << t[it] << ", ";                                   \
      cerr << endl;                                                            \
    }                                                                          \
  }

#define make(x)                                                                \
  int(x);                                                                      \
  scanf("%d", &(x));
#define make2(x, y)                                                            \
  int(x), (y);                                                                 \
  scanf("%d%d", &(x), &(y));
#define make3(x, y, z)                                                         \
  int(x), (y), (z);                                                            \
  scanf("%d%d%d", &(x), &(y), &(z));
#define make4(x, y, z, t)                                                      \
  int(x), (y), (z), (t);                                                       \
  scanf("%d%d%d%d", &(x), &(y), &(z), &(t));
#define makev(v, n)                                                            \
  VI(v);                                                                       \
  FOR(i, 0, (n)) {                                                             \
    make(a);                                                                   \
    (v).pb(a);                                                                 \
  }
#define IOS ios_base::sync_with_stdio(0)
#define HEAP priority_queue

#define read(x) scanf("%d", &(x));
#define read2(x, y) scanf("%d%d", &(x), &(y));
#define read3(x, y, z) scanf("%d%d%d", &(x), &(y), &(z));
#define read4(x, y, z, t) scanf("%d%d%d%d", &(x), &(y), &(z), &(t));
#define readv(v, n)                                                            \
  FOR(i, 0, (n)) {                                                             \
    make(a);                                                                   \
    (v).pb(a);                                                                 \
  }

using namespace std;

int f(int a, int k) {
  if (a < k)
    return 0;
  if (a % k == 0)
    return (a / k);
  int r = a % k;
  int q = a / k;
  if (r < q + 1) {
    return f((k - 1) * q + ((r - 1)), k);
  } else {
    return f(k * q + (r % (q + 1)), k);
  }
}

int main() {
  make(n);
  int ans = 0;
  FOR(i, 0, n) {
    make2(a, b);
    ans ^= f(a, b);
  }
  if (ans == 0)
    printf("Aoki\n");
  else
    printf("Takahashi\n");
}