trang chủ / bài tập / linsearch

Tìm kiếm tuyến tính hiệu quả

Đề bài

Mô tả

Cho một mảng a là một hoán vị của các số nguyên từ 1 đến n (các phần tử được đánh chỉ số từ 1 đến 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ứ 1 đến phần tử thứ n.
  • Cách 2 (Petya): duyệt từ phần tử thứ n về phần tử thứ 1.

Cho m truy vấn, mỗi truy vấn là một giá trị bi 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 n — số phần tử của mảng.
  • Dòng thứ hai chứa n số nguyên phân biệt a1,a2,,an (1ain) — các phần tử của mảng.
  • Dòng thứ ba chứa số nguyên m — số truy vấn.
  • Dòng thứ tư chứa m số nguyên b1,b2,,bm (1bin) — 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

  • 1n105
  • 1m105
  • a là một hoán vị của 1,2,,n.
  • 1bin.

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 2+3+1=6; cách 2 tốn (3+12)+(3+13)+(3+11)=2+1+3=6.

Bình luận

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

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 GO groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0