← Home
For problem statement at 0-999/0-99/60-69/67/problemC.txt this is a correct solution, but verifier at 0-999/0-99/60-69/67/verifierC.go ends with All tests passed can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)

	var ti, td, tr, te int
	var a, b string
	fmt.Fscan(in, &ti, &td, &tr, &te, &a, &b)

	if len(b) > len(a) {
		a, b = b, a
		ti, td = td, ti
	}

	aa := []byte(a)
	bb := []byte(b)
	m, n := len(aa), len(bb)

	aIdx := make([]int, m)
	for i, c := range aa {
		aIdx[i] = int(c - 'a')
	}
	bIdx := make([]int, n)
	for i, c := range bb {
		bIdx[i] = int(c - 'a')
	}

	const INF int = 1 << 30

	prev := make([]int, n+2)
	cur := make([]int, n+2)

	prev[0] = INF
	prev[1] = 0
	for j := 1; j <= n; j++ {
		prev[j+1] = j * ti
	}

	width := n + 2
	store := make([]int, 26*width)
	var da [26]int

	for i := 1; i <= m; i++ {
		cur[0] = INF
		cur[1] = i * td
		db := 0
		ai := aIdx[i-1]

		for j := 1; j <= n; j++ {
			bj := bIdx[j-1]
			i1 := da[bj]
			j1 := db

			cost := tr
			if ai == bj {
				cost = 0
				db = j
			}

			v := prev[j] + cost

			if t := cur[j] + ti; t < v {
				v = t
			}
			if t := prev[j+1] + td; t < v {
				v = t
			}
			if i1 > 0 && j1 > 0 {
				if t := store[bj*width+j1] + (i-i1-1)*td + te + (j-j1-1)*ti; t < v {
					v = t
				}
			}

			cur[j+1] = v
		}

		off := ai * width
		copy(store[off:off+width], prev)
		da[ai] = i
		prev, cur = cur, prev
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	fmt.Fprint(out, prev[n+1])
	out.Flush()
}