trang chủ / bài tập / closepair

Cặp điểm gần nhất

Đề bài

Mô tả

Cho bài toán quen thuộc "tìm cặp điểm gần nhất trên mặt phẳng": cho n điểm, tìm cặp điểm có khoảng cách nhỏ nhất, với khoảng cách giữa (x1,y1)(x2,y2)(x1x2)2+(y1y2)2.

Có một đoạn mã sai độ phức tạp nhưng vẫn thường được chấp nhận. Mã đó hoạt động như sau:

đọc n
đọc n điểm vào mảng p[1..n]
sắp xếp p[] tăng dần theo x, nếu bằng x thì tăng dần theo y
d = INF          // INF là một số đủ lớn
tot = 0
for i from 1 to n:
    for j from (i+1) to n:
        ++tot
        if (p[j].x - p[i].x >= d) then break   // break chỉ thoát khỏi vòng lặp j
        d = min(d, distance(p[i], p[j]))
xuất d

Giá trị tot được coi là thời gian chạy của đoạn mã. Vì máy tính chỉ thực hiện được một số phép tính hữu hạn mỗi giây, đoạn mã bị Time Limit Exceeded khi tot>k.

Nhiệm vụ của bạn: hãy sinh một bộ dữ liệu (một tập n điểm) khiến đoạn mã trên bị TLE, tức là giá trị tot sau khi chạy lớn hơn k. Nếu không tồn tại bộ dữ liệu như vậy, hãy in ra no solution.

Dữ liệu vào

Một dòng duy nhất chứa hai số nguyên nk.

Dữ liệu ra

Nếu không tồn tại bộ dữ liệu thỏa mãn, in ra một dòng no solution (không có dấu nháy).

Ngược lại, in ra n dòng, dòng thứ i chứa hai số nguyên xi,yi là tọa độ điểm thứ i. Bộ dữ liệu phải thỏa mãn:

  • Tất cả các điểm đôi một phân biệt.
  • |xi|,|yi|109.
  • Sau khi chạy đoạn mã trên với bộ dữ liệu này, giá trị tot lớn hơn k.

Bài toán có thể có nhiều đáp án đúng, in ra bất kỳ đáp án nào hợp lệ.

Ràng buộc

  • 2n2000
  • 1k109

Ví dụ

Input Output Giải thích
4 3 0 0
0 1
0 2
0 3
Bốn điểm cùng nằm trên một đường thẳng đứng (x bằng nhau), nên điều kiện p[j].xp[i].xd không bao giờ xảy ra. Vòng lặp chạy đủ mọi cặp: tot=(42)=6>3.
2 100 no solution Với n=2, giá trị tot lớn nhất chỉ là 1 (một cặp duy nhất), không thể vượt k=100.
6 15 no solution Giá trị tot lớn nhất đạt được là (62)=15, không lớn hơn k=15, nên không tồn tại đáp án.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0