Hướng dẫn giải của [KHTN - Thi thử TS10 #2 - 2025] Bài 3: RAND


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Tóm tắt đề bài

Cho ~F(x) = ax + b~ và dãy số ~S = {S_1, S_2, ..., S_n}~ được xác định như sau:

  • ~S_1 = c~
  • ~S_i = F(S_{i-1}) \mod 100~ với ~2 \le i \le n~

Tìm số lớn thứ ~k~ trong dãy ~S~.

Giới hạn: (~a, b \le 10^9, c < 100, n \le 10^7~)

Subtask 1: ~n \le 2 \times 10^5~

Ở subtask này, ta hoàn toàn có thể mô phỏng dãy ~S~ từ ~S_1~ đến ~S_n~ do giới hạn ~n~ không quá to. Sau đó, ta sẽ sắp xếp dãy ~S~ để từ đó tìm được số lớn thứ ~k~.

Độ phức tạp: ~O~ (~n log n~)

Subtask 2: ~n \le 10^7~

Ta có thể để ý rằng, do giá trị ~mod~ tương đối nhỏ (tối đa ~100~), cũng đồng nghĩa giá trị của ~S~ không vượt quá ~99~. Từ đó, ta nhận ra rằng, hoàn toàn có thể sử dụng mảng đánh dấu để có thể đánh dấu số lần xuất hiện của từng phần tử ~S_i~ trong mảng ~S~.

Gọi ~cnt_i~ là số lần giá trị ~i~ xuất hiện trong mảng ~S~. Ta sẽ tiến hành duyệt từ cuối mảng ~cnt~ về đầu, và cộng số lần xuất hiện của giá trị ~i~ vào biến ~res~. Đáp số đề bài chính là giá trị ~i~ đầu tiên mà ~res \ge k~.

Độ phức tạp: ~O~ (~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.