結果

問題 No.3282 Photos and Friends
ユーザー hirayuu_yc
提出日時 2025-09-20 23:37:04
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,498 bytes
コンパイル時間 302 ms
コンパイル使用メモリ 82,900 KB
実行使用メモリ 144,988 KB
最終ジャッジ日時 2025-09-20 23:37:16
合計ジャッジ時間 9,584 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 49 WA * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
def solve():
    data = sys.stdin.read().strip().split()
    if not data:
        return
    it = iter(data)
    N = int(next(it)); P = int(next(it)); Q = int(next(it))
    X = [0]*N
    A = [0]*N
    B = [0]*N
    for i in range(N):
        X[i] = int(next(it)); A[i] = int(next(it)); B[i] = int(next(it))

    L = [0]*N
    R = [0]*N
    sumL = 0
    sumR = 0
    S = 0
    for i in range(N):
        S += X[i]
        Li = max(0, X[i] - B[i])
        Ri = min(A[i], X[i])
        L[i] = Li
        R[i] = Ri
        sumL += Li
        sumR += Ri

    # feasible total a sum must be in intersection of [sumL,sumR] and [S-Q, P]
    need_low = S - Q  # >= this to ensure sum b_i <= Q
    need_high = P     # <= this to ensure sum a_i <= P
    lo = max(sumL, need_low)
    hi = min(sumR, need_high)
    if lo > hi:
        print("No")
        return

    T = lo  # choose any value in [lo,hi]; lo is fine
    delta = T - sumL  # non-negative
    a = L[:]  # start with minimums
    for i in range(N):
        if delta <= 0:
            break
        can = R[i] - L[i]
        give = can if can <= delta else delta
        a[i] += give
        delta -= give

    # final sanity (not necessary but safe)
    sum_a = sum(a)
    sum_b = S - sum_a
    if sum_a <= P and sum_b <= Q:
        print("Yes")
        out = []
        for i in range(N):
            out.append(f"{a[i]} {X[i]-a[i]}")
        print("\n".join(out))
    else:
        print("No")

if __name__ == "__main__":
    solve()
0