#include #include int main() { int n; int64_t K; std::cin >> n >> K; std::vector xs(n); std::vector ys(n); for (int i = 0; i < n; i++) { std::cin >> xs[i] >> ys[i]; } if (K == 0) { std::cout << "0" << std::endl; return 0; } int64_t bestdiamsq = 0; int count = 0; int j = 0; for (int i = 0; i < n; i++) { int ip1 = (i + 1) % n; int64_t dx = xs[ip1] - xs[i]; int64_t dy = ys[ip1] - ys[i]; while (true) { int64_t dx1 = xs[j] - xs[i]; int64_t dy1 = ys[j] - ys[i]; int64_t distsq = dx1 * dx1 + dy1 * dy1; int64_t area1 = dx * dy1 - dy * dx1; int nextj = (j + 1) % n; if (distsq > bestdiamsq) { bestdiamsq = distsq; count = 0; } if (nextj != i && j != ((i + 1) % n) && distsq == bestdiamsq) { count++; } int64_t dx2 = xs[nextj] - xs[i]; int64_t dy2 = ys[nextj] - ys[i]; int64_t area2 = dx * dy2 - dy * dx2; if (area2 < area1) break; else j = nextj; } } count /= 2; int64_t low = 0; int64_t high = 1; while (4LL * high * high * bestdiamsq < K * K) high *= 2LL; while (high - low > 1LL) { int64_t mid = low + (high - low) / 2LL; if (4LL * mid * mid * bestdiamsq < K * K) low = mid; else high = mid; } // std::cout << high << " " << count << std::endl; if (4LL * high * high * bestdiamsq == K * K && high > count) high++; std::cout << high << std::endl; }