刚开始用 Go 语言实现的 BFS 写法,一直 TLE。后面改用 dp 做法,结果还是 TLE。因为时间复杂度是 O(Tnm),果断怀疑读入常数太大了。
原本读入写法:
in = bufio.NewReader(os.Stdin)
out = bufio.NewWriter(os.Stdout)
defer out.Flush()
fmt.Fscan(in, &n, &m, &s, &k)
类似于取消同步流。
后面生成了个快读板子改改后过了。
var (
fr *FastReader
wr *bufio.Writer
)
type FastReader struct {
r *bufio.Reader
buf []byte
}
func NewFastReader(r io.Reader) *FastReader {
return &FastReader{
r: bufio.NewReaderSize(r, 1<<20), // 1 MiB buffer
buf: make([]byte, 0, 1<<20),
}
}
func (fr *FastReader) Int() int {
var val int
sign := 1
// 跳过空白
c, _ := fr.r.ReadByte()
for (c < '0' || c > '9') && c != '-' {
c, _ = fr.r.ReadByte()
}
// 处理负号
if c == '-' {
sign = -1
c, _ = fr.r.ReadByte()
}
for c >= '0' && c <= '9' {
val = val*10 + int(c-'0')
c, _ = fr.r.ReadByte()
}
return val * sign
}
不清楚 c++ 有没有这样的问题。