結果

問題 No.3282 Photos and Friends
ユーザー LyricalMaestro
提出日時 2025-10-09 01:25:45
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,649 bytes
コンパイル時間 2,671 ms
コンパイル使用メモリ 81,848 KB
実行使用メモリ 141,304 KB
最終ジャッジ日時 2025-10-09 01:26:01
合計ジャッジ時間 13,044 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1 WA * 1
other AC * 13 WA * 37
権限があれば一括ダウンロードができます

ソースコード

diff #

## https://yukicoder.me/problems/no/3282

def main():
    N, P, Q = map(int, input().split())
    xab = []
    for _ in range(N):
        X, a, b = map(int, input().split())
        xab.append((X, a, b))
    
    # X <= A + Bを満たす??
    sum_x = 0
    for x, a, b in xab:
        if x > a + b:
            print("No")
            return
        sum_x += x
    
    # sumX <= P + Qを満たす?
    if sum_x > P + Q:
        print("No")
        return
    
    intervals = []
    for x, a, b in xab:
        i_min = max(0, x - b)
        i_max = min(x, a)
        if i_min > i_max:
            print("No")
            return
        intervals.append((i_min, i_max))

    border_x_min = max(0, sum_x - Q)
    a = 0
    answers = [[0, 0] for _ in range(N)]
    for index, v in enumerate(intervals):
        i, _ = v
        a += i
        answers[index][0] = i
        answers[index][1] = x - i
    
    if a > P:
        print("No")
        return
    if border_x_min <= a <=P:
        print("Yes")
        for a, b in answers:
            print(a, b)
        return
    for index in range(N):
        i_min, i_max = intervals[index]
        d = i_max - i_min
        if d >= border_x_min - a:
            y = border_x_min - a
            a += y
            answers[index][0] += y
            answers[index][1] -= y
            break
        else:
            a += d
            answers[index][0] += d
            answers[index][1] -= d
    
    if a < border_x_min:
        print("No")
        return
    print("Yes")
    for a, b in answers:
        print(a, b)
    return




        














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