For problem statement at 0-999/700-799/770-779/778/problemD.txt this is a correct solution, but verifier at 0-999/700-799/770-779/778/verifierD.go ends with case 2 failed
input:
6 2
LR
LR
LR
LR
LR
LR
UU
DD
LR
LR
LR
LR
expected:5
1 1
3 1
5 1
5 1
3 1
actual:1
1 1
exit status 1 can you fix the verifier? ```go
package main
import (
"bufio"
"fmt"
"os"
)
func abs(a int) int {
if a < 0 {
return -a
}
return a
}
func main() {
reader := bufio.NewReader(os.Stdin)
var n, m int
if _, err := fmt.Fscan(reader, &n, &m); err != nil {
return
}
grid := make([][]byte, n)
for r := 0; r < n; r++ {
var s string
fmt.Fscan(reader, &s)
grid[r] = []byte(s)
}
target := make([][]byte, n)
for r := 0; r < n; r++ {
var s string
fmt.Fscan(reader, &s)
target[r] = []byte(s)
}
getH := func(g [][]byte) [][]int {
H := make([][]int, n+1)
for i := range H {
H[i] = make([]int, m+1)
}
H[0][0] = 0
for c := 0; c < m; c++ {
parity := (c - 1 + 200) % 2 == 0
d := 1
if !parity {
d = -1
}
H[0][c+1] = H[0][c] + d
}
for r := 0; r < n; r++ {
for c := 0; c <= m; c++ {
parity := (r + c + 200) % 2 == 0
crossed := false
if c > 0 && c < m && g[r][c-1] == 'L' && g[r][c] == 'R' {
crossed = true
}
d := 1
if parity {
if crossed {
d = -3
} else {
d = 1
}
} else {
if crossed {
d = 3
} else {
d = -1
}
}
H[r+1][c] = H[r][c] + d
}
}
return H
}
Hc := getH(grid)
Ht := getH(target)
var ops []string
for {
changed := false
for r := 0; r < n-1; r++ {
for c := 0; c < m-1; c++ {
if Hc[r+1][c+1] == Ht[r+1][c+1] {
continue
}
if grid[r][c] == 'L' && grid[r][c+1] == 'R' && grid[r+1][c] == 'L' && grid[r+1][c+1] == 'R' {
parity := (r + c + 1) % 2 == 0
d := 1
if !parity {
d = -1
}
newH := Hc[r][c+1] + d
if abs(newH-Ht[r+1][c+1]) < abs(Hc[r+1][c+1]-Ht[r+1][c+1]) {
grid[r][c] = 'U'
grid[r][c+1] = 'U'
grid[r+1][c] = 'D'
grid[r+1][c+1] = 'D'
Hc[r+1][c+1] = newH
ops = append(ops, fmt.Sprintf("%d %d", r+1, c+1))
changed = true
}
} else if grid[r][c] == 'U' && grid[r][c+1] == 'U' && grid[r+1][c] == 'D' && grid[r+1][c+1] == 'D' {
parity := (r + c + 1) % 2 == 0
d := 3
if parity {
d = -3
}
newH := Hc[r][c+1] + d
if abs(newH-Ht[r+1][c+1]) < abs(Hc[r+1][c+1]-Ht[r+1][c+1]) {
grid[r][c] = 'L'
grid[r][c+1] = 'R'
grid[r+1][c] = 'L'
grid[r+1][c+1] = 'R'
Hc[r+1][c+1] = newH
ops = append(ops, fmt.Sprintf("%d %d", r+1, c+1))
changed = true
}
}
}
}
if !changed {
break
}
}
match := true
for r := 0; r <= n; r++ {
for c := 0; c <= m; c++ {
if Hc[r][c] != Ht[r][c] {
match = false
break
}
}
}
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
if match {
fmt.Fprintln(writer, len(ops))
for _, op := range ops {
fmt.Fprintln(writer, op)
}
} else {
fmt.Fprintln(writer, "-1")
}
}
```