結果
| 問題 | No.3282 Photos and Friends |
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2026-04-29 00:42:46 |
| 言語 | Go (1.26.1) |
| 結果 |
AC
|
| 実行時間 | 319 ms / 2,000 ms |
| コード長 | 1,283 bytes |
| 記録 | |
| コンパイル時間 | 12,368 ms |
| コンパイル使用メモリ | 276,800 KB |
| 実行使用メモリ | 16,128 KB |
| 最終ジャッジ日時 | 2026-04-29 00:43:08 |
| 合計ジャッジ時間 | 19,610 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge1_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 50 |
ソースコード
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.x {
nb := r.x - r.a
if q < nb {
return nil
}
ans[i].b = nb
q -= nb
}
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
}
ID 21712