SQRT Contest #02 - D - Divisor sequence

Xem dạng PDF

Gửi bài giải

Điểm: 17,00
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Java, Kotlin, Pascal, PyPy, Python, Scratch

Alice vừa được học về ước và bội của một số nguyên trên lớp. Nếu một số nguyên ~a~ chia hết cho một số nguyên ~b~, ta nói rằng ~a~ là bội của ~b~ và ~b~ là ước của ~a~.

Để kiểm tra kiến thức và khả năng tính toán của các học sinh, thầy giáo của Alice đã giao cho các bạn một dãy số ~a_1, a_2, ..., a_n~ rất dài và yêu cầu các bạn chọn ra càng nhiều phần tử càng tốt sao cho khi ghép chúng lại thành một dãy với thứ tự các số được giữ nguyên như trong dãy ~a~ ban đầu, ký hiệu là dãy ~b_1, b_2, ..., b_k~, thì ~b_i~ là ước hoặc bội của ~b_{i - 1}~ với mọi số nguyên ~2 \le i \le k~. Bạn nào chọn được nhiều phần tử nhất (giá trị ~k~ lớn nhất) sẽ nhận được một phần thưởng từ thầy giáo.

Alice rất muốn chiến thắng trong trò chơi này. Hãy giúp Alice tìm ra dãy ~b~ dài nhất.

Dữ liệu

  • Dòng đầu tiên gồm một số nguyên dương ~n~ ~(1 \le n \le 10^5)~.
  • Dòng tiếp theo gồm ~n~ số nguyên dương ~a_1, a_2, ..., a_n~ ~(1 \le a_i \le 10^5)~.

Kết quả

  • Dòng đầu tiên gồm một số nguyên dương ~k~ - độ dài dãy ~b~ lớn nhất bạn tìm được.
  • Dòng tiếp theo gồm ~n~ số nguyên ~x_1, x_2, ..., x_k~, với ~x_1 < x_2 < ... < x_k~ là vị trí của các phần tử của dãy ~b~ trong dãy ~a~ ban đầu, hay nói cách khác, ~b_i = a_{x_i}~. Nếu có nhiều kết quả, in ra kết quả bất kỳ.

Ví dụ

Dữ liệu
5
1 2 3 4 5
Kết quả
3
1 2 4
Giải thích
  • Ta có ~b = (a_1, a_2, a_4) = (1, 2, 4)~, với ~2~ là bội của ~1~ và ~4~ là bội của ~2~. Dễ dàng nhận thấy đây là dãy ~b~ dài nhất thỏa mãn.

Bình luận

Hãy đọc nội quy trước khi bình luận.


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