#include <bits/stdc++.h>
using namespace std;
int read() {
  register int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = 10 * x + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const int Size = 100005;
int n, top;
struct vec {
  double x, y;
} w[Size], a[Size], O, stk[Size];
inline vec operator-(vec a, vec b) { return (vec){a.x - b.x, a.y - b.y}; }
inline vec operator+(vec a, vec b) { return (vec){a.x + b.x, a.y + b.y}; }
inline bool operator<(vec a, vec b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
inline double Xji(vec p, vec q) { return p.x * q.y - p.y * q.x; }
inline double dist(vec mhy) { return mhy.x * mhy.x + mhy.y * mhy.y; }
inline bool comp(vec jzm, vec xjp) {
  double tmp = Xji(jzm, xjp);
  if (fabs(tmp) > 1e-6) return tmp > 1e-6;
  return dist(jzm) < dist(xjp);
}
inline double dist(vec mhy, vec zwt) {
  return sqrt((mhy.x - zwt.x) * (mhy.x - zwt.x) +
              (mhy.y - zwt.y) * (mhy.y - zwt.y));
}
inline vec rotate(vec a, double rad) {
  return (vec){a.x * cos(rad) - a.y * sin(rad),
               a.x * sin(rad) + a.y * cos(rad)};
}
int main() {
  n = read();
  for (register int i = 1; i <= n; i++) {
    double x, y;
    scanf("%lf %lf", &x, &y);
    w[i].x = x;
    w[i].y = y - x * x;
  }
  vec O = w[1];
  int id = 1;
  for (register int i = 2; i <= n; i++) {
    if (w[i] < O) {
      id = i;
      O = w[i];
    }
  }
  swap(w[id], w[1]);
  for (register int i = 1; i <= n; i++) {
    a[i] = w[i] - O;
  }
  sort(a + 2, a + 1 + n, comp);
  for (register int i = 1; i <= n; i++) {
    while (top > 1 && Xji(stk[top] - stk[top - 1], a[i] - stk[top - 1]) <= 0) {
      top--;
    }
    stk[++top] = a[i];
  }
  for (register int i = 1; i <= top; i++) {
    stk[i] = stk[i] + O;
  }
  int ans = 0;
  for (register int i = 1; i <= top; i++) {
    int pos = i % top + 1;
    if (stk[i].x > stk[pos].x) {
      ans++;
    }
  }
  printf("%d", ans);
  return 0;
}
