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

    solution

    Đề bài: [Java] Chuyển tiền ngân hàng với synchronized

    Có M tài khoản đánh số 0..M-1, ban đầu mỗi tài khoản có số dư balance_i. Có T giao dịch chuyển x đồng từ tài khoản u sang v. Các giao dịch được chạy song song bởi T thread. Dùng synchronized trên một Object lock GLOBAL DUY NHẤT để đảm bảo cập nhật atomically. Sau khi join tất cả, in M số dư cuối cùng cách nhau bởi dấu cách (theo thứ tự tài khoản 0..M-1).

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

      Dòng 1: M T (1 ≤ M ≤ 100; 0 ≤ T ≤ 1000). Dòng 2: M số dư ban đầu (0 ≤ balance ≤ 10^9). T dòng sau: u v x (0 ≤ u,v < M; u ≠ v; 1 ≤ x ≤ 10^6). Có thể balance[u] thiếu — vẫn cứ trừ (cho phép âm).

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

      1 ≤ M ≤ 100; 0 ≤ T ≤ 1000

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

      Một dòng M số dư cuối, theo thứ tự tài khoản 0..M-1.

    Ví dụ:

    Đầu vào:

    3 2
    100 200 300
    0 1 50
    2 0 30
    

    Đầu ra:

    80 250 270

    Giải thích:

    tx1: 0→1 50 ⇒ bal=[50,250,300]. tx2: 2→0 30 ⇒ bal=[80,250,270]. Vì có lock nên tổng bảo toàn = 600.

    Đang tải editor...