Tìm kiếm tuyến tính hiệu quả
Đề bài
Mô tả
Cho một mảng là một hoán vị của các số nguyên từ đến (các phần tử được đánh chỉ số từ đến ). Ta xét thuật toán tìm kiếm tuyến tính: để tìm một giá trị, ta lần lượt so sánh từng phần tử của mảng với giá trị cần tìm cho đến khi gặp phần tử bằng nó thì dừng. Hiệu quả của một lần tìm kiếm là số phép so sánh đã thực hiện.
Có hai cách duyệt:
- Cách 1 (Vasya): duyệt từ phần tử thứ đến phần tử thứ .
- Cách 2 (Petya): duyệt từ phần tử thứ về phần tử thứ .
Cho truy vấn, mỗi truy vấn là một giá trị cần tìm trong mảng (các truy vấn có thể lặp lại). Hãy tính tổng số phép so sánh mà mỗi cách cần để trả lời tất cả các truy vấn.
Dữ liệu vào
- Dòng đầu chứa số nguyên — số phần tử của mảng.
- Dòng thứ hai chứa số nguyên phân biệt () — các phần tử của mảng.
- Dòng thứ ba chứa số nguyên — số truy vấn.
- Dòng thứ tư chứa số nguyên () — các giá trị cần tìm.
Dữ liệu ra
In ra hai số nguyên: tổng số phép so sánh của cách 1 (Vasya) và tổng số phép so sánh của cách 2 (Petya), cách nhau bởi một dấu cách.
Ràng buộc
- là một hoán vị của .
- .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 2 1 2 1 1 |
1 2 | Cách 1 so sánh với phần tử thứ 1 (bằng 1) ngay, tốn 1 phép. Cách 2 so sánh với phần tử thứ 2 rồi thứ 1, tốn 2 phép. |
| 2 2 1 1 1 |
2 1 | Giá trị 1 nằm ở vị trí 2. Cách 1 tốn 2 phép, cách 2 tốn 1 phép. |
| 3 3 1 2 3 1 2 3 |
6 6 | Với ba truy vấn 1, 2, 3: vị trí lần lượt là 2, 3, 1. Cách 1 tốn ; cách 2 tốn . |
Bình luận