Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Go] Select + cancel: dừng sớm tất cả worker khi tìm thấy

    Cho N số nguyên dương và một mục tiêu T. M worker chia phần để tìm chỉ-số đầu tiên (nhỏ nhất) i mà a[i] == T. Mỗi worker quét shard riêng, nếu thấy thì gửi chỉ-số qua channel hit. Main dùng select chờ một kết quả; sau khi nhận ít nhất một hit (hoặc tất cả worker xong mà không thấy), đóng channel done để các worker còn lại dừng quét. Vì có thể nhiều worker tìm thấy ở các shard khác nhau, main thu thập tất cả hit đã gửi cho đến khi mọi worker thoát, rồi in chỉ-số nhỏ nhất (1-based). Nếu không tìm thấy, in -1.

    • Định dạng đầu vào:

      Dòng 1: N M T (1 ≤ M ≤ 16, 1 ≤ N ≤ 10^5, |T| ≤ 10^9). Dòng 2: N số nguyên.

    • Ràng buộc đầu vào:

      N ≤ 10^5; M ≤ 16

    • Định dạng đầu ra:

      Một số nguyên: chỉ-số 1-based nhỏ nhất chứa T, hoặc -1.

    Ví dụ:

    Đầu vào:

    8 3 7
    1 2 7 3 7 4 7 5
    

    Đầu ra:

    5

    Giải thích:

    Các vị trí (0-based) có giá trị 7: 2,4,6. Worker shard khác nhau có thể đều gửi hit; main lấy min = 2 -> in 1-based = 3.

    Đang tải editor...