Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: Не проходит решение 21961943 для задачи № 202 "Поиск подстроки", падает на первом тесте. Сравнил файл output.txt которые гененрируется локально и тот который можно скачать с acmp (после нжатия на море упавшего теста) они идентичны. В чём может быть дело?
1
  1  Терентьев Михал Палыч, 23 сентября 2024 г. 11:45:52
      Заменил на ваш ввод, дошло до 11 теста (MLE 11)
  2  Терентьев Михал Палыч, 23 сентября 2024 г. 11:36:50
      Конкретно этот код выдает другое. Проверяйте onlinegdb.com/DfFo5t75t .
  3  Панкин Александр Сергеевич, 23 сентября 2024 г. 11:35:58
      Проблемма была в чтении файла. Позможно из за символа переноса троки. Изменил чтение с

in, _ := os.Open("input.txt")
out, _ := os.Create("output.txt")

var str string
var pattern string

fmt.Fscanf(in, "%s", &str)
fmt.Fscanf(in, "%s", &pattern)

на

in, _ := os.Open("input (1).txt")
out, _ := os.Create("output.txt")

var str string
var pattern string

scanner := bufio.NewScanner(in)

scanner.Scan()
str = scanner.Text()

scanner.Scan()
pattern = scanner.Text()

Заработало
  4  Панкин Александр Сергеевич, 22 сентября 2024 г. 23:27:00
      Сейчас тоже проверил этот код в onlinegdb вывело 0 5 7 такой ответ проходит первый тест
  5  Терентьев Михал Палыч, 22 сентября 2024 г. 21:41:58
      Это код, который вы отправили на проверку? Проверил в onlinegdb, вывело совсем другое. А вообще, посмотрите уже имеющийся псевдокод, например, на neerc. ifmo. ru.
  6  Панкин Александр Сергеевич, 22 сентября 2024 г. 19:36:33
     
}
}

return out
}

func main() {
in, _ := os.Open("input.txt")
out, _ := os.Create("output.txt")

var str string
var pattern string

fmt.Fscanf(in, "%s", &str)
fmt.Fscanf(in, "%s", &pattern)

fmt.Fprintf(out, "%s", SearchForASubstring(str, pattern))
}

//endregion
  7  Панкин Александр Сергеевич, 22 сентября 2024 г. 19:35:29
      package main

import (
"fmt"
"os"
"strconv"
)

//func KMP(s string) []int {
// var n = len(s)
//
// var pi = make([]int, n)
//
// for i := 1; i < n; i++ {
// var j = pi[i-1]
//
// for j > 0 && s[i] != s[j] {
// j = pi[j-1]
// }
//
// if s[i] == s[j] {
// j++
// }
//
// pi[i] = j
// }
//
// return pi
//}
//
//func RepeatedSubstringPattern(s string) bool {
// var pi = KMP(s)
//
// if pi[len(s)-1] != 0 && len(s)%(len(s)-pi[len(s)-1]) == 0 {
// return true
// } else {
// return false
// }
//}
//
//func main() {
// fmt.Println(RepeatedSubstringPattern("abac"))
//}

// region ACMP
func KMP(s string) []int {
var n = len(s)

var pi = make([]int, n)

for i := 1; i < n; i++ {
var j = pi[i-1]

for j > 0 && s[i] != s[j] {
j = pi[j-1]
}

if s[i] == s[j] {
j++
}

pi[i] = j
}

return pi
}

func KmpAuto(s string, startASCII uint8, endASCII uint8) [][]int {
s += string([]uint8{startASCII - 1})

var al = endASCII - startASCII + 1
var n = len(s)

var pi = KMP(s)
var out [][]int = make([][]int, n)

for i := 0; i < n; i++ {
out[i] = make([]int, al)

for c := uint8(0); c < al; c++ {
if i > 0 && (c+startASCII) != s[i] {
out[i][c] = out[pi[i-1]][c]
} else {
var add int

if (c + startASCII) == s[i] {
add = 1
}

out[i][c] = i + add
}
}
}

return out
}

func SearchForASubstring(str string, pattern string) string {
var out = ""
var aut = KmpAuto(pattern, 97, 122)

var curr = 0

for i, c := range str {
curr = aut[curr][c-97]

if curr == len(pattern) {
out += strconv.FormatInt(int64(i-len(pattern)+1), 10) + " "
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2024, ИНН 246305493507, E-mail: admin@acmp.ru