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

    solution

    Đề bài: [Go] Worker pool với timeout per-task

    Có N task, mỗi task chỉ là một cặp (id, work_ms). Worker pool M worker xử lý các task. Quy ước: mỗi task được coi là 'thành công' nếu work_ms ≤ T (giả lập timeout deadline T), 'timeout' nếu vượt. Dùng select + time.After để mô phỏng deadline. KHÔNG sleep thật để test chạy nhanh — thay vào đó so sánh work_ms với T trong worker, sau đó gửi cặp (id, status) ra channel kết quả. Main gom N kết quả, sort theo id tăng dần và in dạng "id ok" hoặc "id timeout".

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

      Dòng 1: N M T (1 ≤ M ≤ 16, 1 ≤ N ≤ 10^4, 1 ≤ T ≤ 10^9). Tiếp theo N dòng: id work_ms (1 ≤ id, work_ms ≤ 10^9). id duy nhất.

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

      N ≤ 10^4; M ≤ 16

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

      N dòng dạng "id ok" hoặc "id timeout", sort theo id tăng dần.

    Ví dụ:

    Đầu vào:

    4 2 100
    1 50
    2 150
    3 100
    4 200
    

    Đầu ra:

    1 ok
    2 timeout
    3 ok
    4 timeout

    Giải thích:

    T=100. task 1 (50)<=100 ok; 2 (150)>100 timeout; 3 (100)<=100 ok; 4 (200)>100 timeout. Sort theo id.

    Đang tải editor...