結果

問題 No.1949 足し算するだけのパズルゲーム(2)
ユーザー ID 21712
提出日時 2025-05-17 03:31:46
言語 Go
(1.23.4)
結果
WA  
実行時間 -
コード長 1,263 bytes
コンパイル時間 11,815 ms
コンパイル使用メモリ 238,136 KB
実行使用メモリ 14,524 KB
最終ジャッジ日時 2025-05-17 03:32:01
合計ジャッジ時間 14,895 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 22 WA * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

package main

import . "fmt"
import . "os"
import bf "bufio"
import "container/heap"

func main() {
	rd := bf.NewReader(Stdin)
	var h,w,y,x int
	Fscan(rd,&h,&w,&y,&x)
	x--
	y--
	a := make([][]int, h)
	v := make([][]bool, h)
	for i := range a {
		a[i] = make([]int, w)
		v[i] = make([]bool, w)
		for j := range a[i] {
			Fscan(rd,&a[i][j])
		}
	}
	dt := []int{-1, 0, 1, 0, -1}	
	cnt := 0
	cur := a[y][x]
	pq := make(PQ, 0, h*w)
	v[y][x] = true
	heap.Push(&pq, &Item{y, x, 0})
	for pq.Len() > 0 {
		item := heap.Pop(&pq).(*Item)
		if item.value > cur {
			Println("No")
			return
		}
		cnt++
		cur += item.value
		for i, dy := range dt[1:] {
			dx := dt[i]
			x := item.x+dx
			y := item.y+dy
			if 0<=y&&y<h&&0<=x&&x<w&&!v[y][x] {
				v[y][x] = true
				heap.Push(&pq, &Item{y,x, a[y][x]})
			}
		}
	}
	if cnt == h*w {
		Println("Yes")
	} else {
		Println("No")
	}
	
}

type Item struct {
	y,x,value int
}

type PQ []*Item

func (pq PQ) Len() int { return len(pq) }
func (pq PQ) Less(i, j int) bool { return pq[i].value < pq[j].value }
func (pq PQ) Swap(i, j int) { pq[i], pq[j] = pq[j], pq[i] }
func (pq *PQ) Push(x any) {
	*pq = append(*pq, x.(*Item))
}
func (pq *PQ) Pop() any {
	old := *pq
	n := len(old)-1
	x := old[n]
	old[n] = nil
	*pq = old[:n]
	return x
}
0