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

    solution

    Đề bài: [Java] Tránh deadlock khi chuyển tiền N tài khoản

    Có M tài khoản (mỗi tài khoản là một Object lock RIÊNG). T giao dịch chuyển từ u sang v giá trị x được chạy song song bởi T thread. Để tránh deadlock, mỗi giao dịch PHẢI lock 2 tài khoản theo THỨ TỰ ID TĂNG DẦN (synchronized(locks[min(u,v)]) bên ngoài, synchronized(locks[max(u,v)]) bên trong), rồi mới cập nhật balance. Sau khi join, in M số dư cuối theo thứ tự 0..M-1.

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

      Dòng 1: M T. Dòng 2: M số dư ban đầu. T dòng: u v x.

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

      1 ≤ M ≤ 100; 0 ≤ T ≤ 1000; u ≠ v

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

      M số dư cuối cách nhau bởi dấu cách (deterministic vì cộng/trừ giao hoán).

    Ví dụ:

    Đầu vào:

    3 3
    100 100 100
    0 1 10
    1 2 20
    2 0 30
    

    Đầu ra:

    120 90 90

    Giải thích:

    tx tổng cộng giao hoán: 0 mất 10+nhận 30 = +20. 1 nhận 10+mất 20 = -10. 2 nhận 20+mất 30 = -10. ⇒ [120,90,90].

    Đang tải editor...