結果

問題 No.3282 Photos and Friends
コンテスト
ユーザー ID 21712
提出日時 2026-04-29 00:35:21
言語 Go
(1.26.1)
コンパイル:
env GOCACHE=/tmp go build _filename_
実行:
./Main
結果
WA  
実行時間 -
コード長 1,315 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 15,533 ms
コンパイル使用メモリ 268,896 KB
実行使用メモリ 15,232 KB
最終ジャッジ日時 2026-04-29 00:35:52
合計ジャッジ時間 30,907 ms
ジャッジサーバーID
(参考情報)
judge1_1 / judge3_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 34 WA * 16
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

package main

import . "fmt"
import . "os"
import bf "bufio"

type Req struct {
	x,a,b int
}

type Res struct {
	a, b int
}

func main() {
	rd:=bf.NewReader(Stdin)
	wr:=bf.NewWriter(Stdout)
	defer wr.Flush()
	
	var n,p,q int
	Fscan(rd,&n,&p,&q)
	rs := make([]*Req, n)
	for i := range rs {
		var x,a,b int
		Fscan(rd,&x,&a,&b)
		rs[i] = &Req{x,a,b}
	}
	
	ans := solve(n,p,q,rs)
	if len(ans) == 0 {
		Fprintln(wr,"No")
	} else {
		Fprintln(wr,"Yes")
		for _, r := range ans {
			Fprintln(wr, r.a, r.b)
		}
	}
}

func solve(n, p, q int, rs []*Req) []*Res {
	sum := 0
	for _, r := range rs {
		if r.a+r.b < r.x {
			return nil
		}
		sum += r.x
	}
	if sum > p+q {
		return nil
	}
	ans := make([]*Res, n)
	for i := range ans {
		ans[i] = new(Res)
	}
	for i, r := range rs {
		if r.a < r.b {
			if r.a < r.x {
				nb := r.x - r.a
				if q < nb {
					return nil
				}
				ans[i].b = nb
				q -= nb
			}
		} else if r.b < r.x {
			na := r.x - r.b
			if p < na {
				return nil
			}
			ans[i].a = na
			p -= na
		}
	}
	for i, r := range rs {
		s := ans[i]
		if p > 0 && s.a+s.b<r.x && r.a-s.a > 0 {
			c := min(p, r.x-s.a-s.b, r.a-s.a)
			s.a += c
			p -= c
		} 
		if q > 0 && s.a+s.b<r.x && r.b-s.b > 0 {
			c := min(q, r.x-s.a-s.b, r.b-s.b)
			s.b += c
			q -= c
		}
		if s.a+s.b < r.x {
			return nil
		}
	}
	return ans
}
0