canuc80k2113·14/50

Hai Mặt Số Không Mốc

Nộp bài trên LQDOJ

Bài 21 · KMP

Một hình trên mặt số tròn được mô tả bởi vạch tại các góc nguyên từ đến . Ta được phép quay đồng thời toàn bộ hình thứ nhất một góc bất kỳ theo modulo . Hãy xác định có thể làm tập vạch của hai hình trùng nhau hoàn toàn hay không.

Input

  • Dòng đầu chứa .
  • Dòng thứ hai chứa góc của hình thứ nhất.
  • Dòng thứ ba chứa góc của hình thứ hai.

Output

  • In possible nếu tồn tại một phép quay phù hợp; nếu không, in impossible.

Constraints

  • .
  • Mỗi góc thuộc .
  • Trong cùng một hình, không có hai vạch trùng góc.

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

4
0 90000 180000 270000
45000 135000 225000 315000

Output

possible

Giải thích: Quay hình thứ nhất thêm đơn vị làm bốn góc lần lượt thành , đúng bằng hình thứ hai.

Lời giải tóm tắt
  • Phân tích: Quyết định hai tập n góc trên đường tròn 360000 đơn vị có thể trùng hoàn toàn sau một phép quay hay không.
  • Phân tích: Sắp xếp mỗi tập, tạo dãy n khoảng cách liên tiếp có cả khoảng cách cuối-đầu, rồi dùng KMP kiểm tra dãy thứ hai có xuất hiện trong hai bản nối của dãy thứ nhất (chỉ 2n-1 phần tử) hay không.
  • Thuật toán: 1. Đọc và chuyển dữ liệu về biểu diễn nêu trong phần phân tích. 2. Tính prefix-function cho mẫu hoặc dãy cần so khớp. 3. Quét dữ liệu bằng các failure link; mỗi khi đạt trạng thái đầy đủ, cập nhật kết quả đúng theo contract của bài. 4. In kết quả theo đúng thứ tự và quy tắc trường hợp biên đã nêu.
  • Chứng minh: Phép quay bảo toàn các khoảng cách tuần tự và chỉ đổi nơi bắt đầu đọc dãy vòng. Ngược lại, nếu hai dãy khoảng cách khớp sau một phép xoay chỉ số, căn chỉnh một vạch đầu rồi cộng dồn cho thấy mọi vạch còn lại cũng trùng; vì thế kiểm tra phép xoay dãy là tương đương.
  • Độ phức tạp: O(n log n) thời gian do sắp xếp, O(n) bộ nhớ.