結果
| 問題 | No.430 文字列検索 | 
| コンテスト | |
| ユーザー |  Ogtsn99 | 
| 提出日時 | 2025-03-28 00:51:10 | 
| 言語 | Go (1.23.4) | 
| 結果 | 
                                TLE
                                 
                             | 
| 実行時間 | - | 
| コード長 | 3,813 bytes | 
| コンパイル時間 | 14,268 ms | 
| コンパイル使用メモリ | 240,492 KB | 
| 実行使用メモリ | 7,324 KB | 
| 最終ジャッジ日時 | 2025-03-28 00:51:41 | 
| 合計ジャッジ時間 | 30,848 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 10 TLE * 4 | 
ソースコード
package main
import (
	"bufio"
	"fmt"
	"math"
	"os"
	"strconv"
)
const (
	MOD = 1000000007
	INF = 1 << 62
)
// ==================================================
// io
// ==================================================
var sc = bufio.NewScanner(os.Stdin)
var wr = bufio.NewWriter(os.Stdout)
func print(x ...interface{}) {
	fmt.Fprint(wr, x...)
}
func println(x ...interface{}) {
	fmt.Fprintln(wr, x...)
}
func flush() {
	e := wr.Flush()
	if e != nil {
		panic(e)
	}
}
// exit exits the program after flushing all buffers.
func exit() {
	flush()
	os.Exit(0)
}
// ni scans a single integer.
func ni() int {
	sc.Scan()
	i, e := strconv.Atoi(sc.Text())
	if e != nil {
		panic(e)
	}
	return i
}
// ni2 scans two integers.
func ni2() (int, int) {
	return ni(), ni()
}
// ni3 scans three integers.
func ni3() (int, int, int) {
	return ni(), ni(), ni()
}
// ni4 scans four integers.
func ni4() (int, int, int, int) {
	return ni(), ni(), ni(), ni()
}
// nu scans a single uint.
func nu() uint {
	sc.Scan()
	i, e := strconv.Atoi(sc.Text())
	if e != nil {
		panic(e)
	}
	return uint(i)
}
// nu2 scans two uints.
func nu2() (uint, uint) {
	return nu(), nu()
}
// nu3 scans three uints.
func nu3() (uint, uint, uint) {
	return nu(), nu(), nu()
}
// nu4 scans four uints.
func nu4() (uint, uint, uint, uint) {
	return nu(), nu(), nu(), nu()
}
// nf scans a single float64.
func nf() float64 {
	sc.Scan()
	i, e := strconv.ParseFloat(sc.Text(), 64)
	if e != nil {
		panic(e)
	}
	return i
}
// nf2 scans two float64s.
func nf2() (float64, float64) {
	return nf(), nf()
}
// nc scans a single byte.
func nc() byte {
	sc.Scan()
	return sc.Text()[0]
}
// nc2 scans two bytes.
func nc2() (byte, byte) {
	return nc(), nc()
}
// ns scans a string.
func ns() string {
	sc.Scan()
	return sc.Text()
}
// ns2 scans two strings.
func ns2() (string, string) {
	return ns(), ns()
}
// nis scans a slice of integers.
func nis(n int) []int {
	a := make([]int, n)
	for i := 0; i < n; i++ {
		a[i] = ni()
	}
	return a
}
// nis2 scans two slices of integers.
func nis2(n int) ([]int, []int) {
	a := make([]int, n)
	b := make([]int, n)
	for i := 0; i < n; i++ {
		a[i], b[i] = ni2()
	}
	return a, b
}
// nis3 scans three slices of integers.
func nis3(n int) ([]int, []int, []int) {
	a := make([]int, n)
	b := make([]int, n)
	c := make([]int, n)
	for i := 0; i < n; i++ {
		a[i], b[i], c[i] = ni3()
	}
	return a, b, c
}
// nss scans a slice of strings.
func nss(n int) []string {
	a := make([]string, n)
	for i := 0; i < n; i++ {
		a[i] = ns()
	}
	return a
}
// nus scans a slice of uints.
func nus(n int) []uint {
	a := make([]uint, n)
	for i := 0; i < n; i++ {
		a[i] = nu()
	}
	return a
}
// nfs scans a slice of float64s.
func nfs(n int) []float64 {
	a := make([]float64, n)
	for i := 0; i < n; i++ {
		a[i] = nf()
	}
	return a
}
type KMP struct {
	table []int
	p     string
	sz    int
}
func NewKMP(pattern string) *KMP {
	sz := len(pattern)
	table := make([]int, sz+1)
	table[0] = -1
	j := -1
	for i := 0; i < sz; i++ {
		for j >= 0 && pattern[i] != pattern[j] {
			j = table[j]
		}
		j++
		if i+1 < sz && pattern[i+1] == pattern[j] {
			table[i+1] = table[j]
		} else {
			table[i+1] = j
		}
	}
	return &KMP{
		table: table,
		p:     pattern,
		sz:    sz,
	}
}
func (kmp *KMP) FindFrom(t string) []int {
	n := len(t)
	k := 0
	var positions []int
	for i := 0; i < n; i++ {
		for k >= 0 && kmp.p[k] != t[i] {
			k = kmp.table[k]
		}
		k++
		if k >= kmp.sz {
			positions = append(positions, i-kmp.sz+1)
			k = kmp.table[k]
		}
	}
	return positions
}
func main() {
	defer wr.Flush()
	sc.Split(bufio.ScanWords)
	sc.Buffer([]byte{}, math.MaxInt32)
	solve()
}
func solve() {
	s := ns()
	n := ni()
	ans := 0
	for i := 0; i < n; i++ {
		t := ns()
		kmp := NewKMP(t)
		ans += len(kmp.FindFrom(s))
	}
	println(ans)
}
            
            
            
        