输入样例:
8 3 aabbaabb 1 3 5 7 1 3 6 8 1 2 1 2输出结果:
Yes No Yes不使用rune处理的方式
package main import ( "bufio" "fmt" "os" "strconv" "strings" ) const ( N = 100010 P = 131 ) var st[N]int64 var p,h [N]int64 func readLine(r *bufio.Reader) []int { s, _ := r.ReadString('\n') sSlice := strings.Fields(s) res := make([]int, len(sSlice)) for i, k := range sSlice { res[i], _ = strconv.Atoi(k) } return res } func get(l,r int) int64 { return h[r]-h[l-1]*p[r-l+1] } func main() { r := bufio.NewReader(os.Stdin) var n, m int in := readLine(r) n, m = in[0], in[1] s,_ :=r.ReadString('\n') //ss :=strings.Fields(s) for i,v:=range s{ //for i:=1;i<=len(s);i++{ // st[i] = s[i-1] st[i+1] = int64(v) } //fmt.Println(st[:len(s)]) p[0]=1 //预处理p和h for i := 1; i <= n; i++ { //u ,_:=strconv.Atoi(st[i]) h[i] = h[i - 1] * P + st[i] p[i] = p[i - 1] * P } fmt.Println(h[:n+1]) for ;m>0;m--{ in=readLine(r) l1, r1, l2, r2 := in[0], in[1], in[2], in[3] if get(l1, r1) == get(l2, r2) { fmt.Println("Yes") } else { fmt.Println("No") } } }