Bài 2 - REARRANGE

Xem PDF



Tác giả:
Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1400 Thời gian: 1.0s Bộ nhớ: 256M Input: REARRANGE.inp Output: REARRANGE.out

Tại trung tâm nghiên cứu vô tuyến, các chuyên gia đang thử nghiệm một giao thức truyền tin mật mã mới. Mỗi thông điệp được mã hóa thành một chuỗi gồm \(n\) tín hiệu rời rạc, tín hiệu thứ \(j\) có cường độ là một số nguyên dương \(a_j\).

Để giải mã được thông điệp, hệ thống cần tìm cách đồng bộ hóa chuỗi tín hiệu này. Quá trình đồng bộ hóa thành công nếu hệ thống có thể đảo lộn thứ tự các tín hiệu trong chuỗi ban đầu để tạo ra một cấu hình mới, sao cho tồn tại một điểm cắt \(i\) (\(1 \le i < n\)) chia chuỗi thành hai phần thỏa mãn tính chất:

  • Ngưỡng năng lượng tối thiểu của phần đầu tiên (từ vị trí \(1\) đến \(i\)) phải bằng chính xác tần số cơ bản (ước chung lớn nhất) của phần thứ hai (từ vị trí \(i + 1\) đến \(n\)).

Nói cách khác, từ dãy \(a_1, a_2, \dots, a_n\) ban đầu, cần kiểm tra xem có tồn tại một hoán vị của dãy và một chỉ số \(i\) sao cho:

\[ \min(a_1, a_2, \dots, a_i) = \text{gcd}(a_{i+1}, a_{i+2}, \dots, a_n) \]

Yêu cầu: Cho trước \(T\) bộ dữ liệu thử nghiệm, mỗi bộ chứa \(n\) cường độ tín hiệu \(a_1, a_2, \dots, a_n\). Với mỗi bộ dữ liệu, hãy xác định xem có tồn tại cách đảo lộn thứ tự thỏa mãn điều kiện đồng bộ khóa hay không.

Input

  • Dòng đầu tiên chứa số nguyên dương \(T\) (\(T \le 5\)) là số lượng bộ test.
  • Tiếp theo là \(T\) nhóm dòng, mỗi nhóm tương ứng với một bộ test có cấu trúc như sau:
    • Dòng thứ nhất chứa số nguyên dương \(n\) là số lượng tín hiệu.
    • Dòng thứ hai chứa \(n\) số nguyên dương \(a_1, a_2, \dots, a_n\) (\(a_j \le 10^{12}\)), các số được ghi cách nhau bởi khoảng trắng.

Output

  • Gồm \(T\) dòng, dòng thứ \(k\) ghi đáp án cho bộ test thứ \(k\). In ra YES nếu tồn tại cách hoán vị thỏa mãn yêu cầu, ngược lại in ra NO.

Example

Test 1

Input
2
3
6 4 2
3
3 5 7
Output
YES
NO
Note
  • Ở bộ test đầu tiên, dãy ban đầu là \((6, 4, 2)\). Ta có thể hoán vị dãy thành \((2, 4, 6)\) và chọn điểm cắt \(i = 1\). Khi đó, tập phần đầu là \(\{2\}\)\(\min = 2\), tập phần sau là \(\{4, 6\}\)\(\text{gcd}(4, 6) = 2\). Do \(\min = \text{gcd} = 2\), điều kiện được thỏa mãn \(\rightarrow\) In ra YES.
  • Ở bộ test thứ hai, dãy là \((3, 5, 7)\). Vì cả 3 số đều là số nguyên tố cùng nhau, gcd của bất kỳ tập con nào nhiều hơn 1 phần tử (hoặc 1 phần tử) cũng không thể bằng min của tập còn lại. Do đó không có hoán vị nào thỏa mãn \(\rightarrow\) In ra NO.

Scoring

  • Subtask \(1\) (\(30\%\) số điểm): \(n \le 10\).
  • Subtask \(2\) (\(30\%\) số điểm): \(10 < n \le 100\).
  • Subtask \(3\) (\(40\%\) số điểm): \(100 < n \le 10^6\) (Tổng \(n\) trong tất cả các testcase không vượt quá \(10^6\)).

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: