[Buổi 14][Chuyên đề Tham lam & chiến lược tìm kiếm][HW] Bài 2: Truy vấn thứ tự loại vòng tròn
Truy vấn thứ tự loại vòng tròn
Bối cảnh và bài toán
Có n vị trí 1..n trên vòng tròn. Ở mỗi lượt quét, cứ bỏ một vị trí còn sống rồi giữ một vị trí theo quy tắc loại mọi vị trí thứ hai như bài Josephus chuẩn. Với mỗi truy vấn (n,k), cần biết vị trí bị loại thứ k, trong khi n có thể tới 10^9.
Yêu cầu
Trả lời vị trí bị loại thứ k cho từng truy vấn.
Input
- Dòng 1: số truy vấn
q. - Mỗi dòng tiếp:
n k.
Output
Mỗi truy vấn in một đáp án.
Ràng buộc
1 <= q <= 10^51 <= k <= n <= 10^9
Chấm điểm
| Subtask | Điểm | Điều kiện | Official tests |
|---|---|---|---|
| S1 | 20% | n, q ≤ 10^3 | 01–04 |
| S2 | 30% | n ≤ 10^6, q ≤ 2 * 10^4 | 05–10 |
| S3 | 50% | Không có ràng buộc bổ sung | 11–20 |
Ví dụ 1
Input
4
7 1
7 3
2 2
1337 1313
Output
2
6
1
1107
Giải thích. Kết quả theo thứ tự loại every-second của từng kích thước vòng.
Ví dụ 2
Input
3
10 1
10 5
10 6
Output
2
10
3
Giải thích. Năm người đầu tiên bị loại là các số chẵn 2,4,6,8,10; sau đó bài toán thu nhỏ trên các số lẻ.
Thông tin bài tập
| Thuộc tính | Giá trị |
|---|---|
| Mã bài | DSA-M04-B14-HW02 |
| Buổi | B14 |
| Loại bài | HOMEWORK |
| Mức độ khó | Khó (Hard) |
| Thời gian làm bài khuyến nghị | 75 phút |
| Time limit | 2 giây |
| Memory limit | 256 MB |
| Tổng điểm | 100 |
| Chuẩn ngôn ngữ tham chiếu | C++11 trở lên |
Nguồn: Phỏng theo CSES Problem Set — Josephus Queries (Task 2164).
Tham khảo: https://cses.fi/problemset/task/2164/
Comments