I am not Liar
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Зачем его использовать, если строка в паскале занимает максимум 256 байт, вполне сайдет и тип байт. | Вся сложность состоит в том, что длина строки может достигать 100000. Поэтому пришлось юзать longint. Сейчас похимичу немного с кодом, воспользуюсь вашими советами А что по поводу задачи D, которую я описал чуть выше? Я ошибся, по времени она проходит, а вот ответ на остальных тестах выдает неправильный Добавлено: Итак, решение выглядит теперь вот так: Код: var s:string; n:longint; function is_pal(a:string):boolean; var i,k:longint; begin is_pal:=true; k:=length(a); i:=1; while i<=(k div 2) do begin if a[i]<>(a[k-i+1]) then begin is_pal:=false; exit; end; inc(i); end; end; procedure init; begin assign(input,'j.in'); reset(input); readln(s); close(input); end; procedure run; var i,j,k:longint; begin n:=0; k:=length(s); for i:=1 to k do begin for j:=i to k do begin if i=j then inc(n) else begin if is_pal(copy(s,i,j-i+1)) then inc(n); end; end; end; end; procedure outd; begin assign(output,'j.out'); rewrite(output); write(n); close(output); end; begin init; run; outd; end. | Работать стало быстрее на тех тестах, которые до этого проходились за секунду, но баллов все также 40 из-за ограничения по времени Добавлено: Цитата: добавлю ещё, перед вызовом is_pal можно проверять на однобуквенные слова. Авторы задачи считают, что однобуквенное слово - это палиндром (чуднО, но они так хотят , поэтому: | Если в функции is_pal использовать цикл for, то проверка не нужна будет..однобуквеные слова сразу посчитаются как палиндромы. Но это не суть) |