ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1684. Последнее слово Джека

WA 3! HELP!!!!
Послано Felix_Mate 28 ноя 2015 16:17
Code:
 const Nmax=155000;
var
 Z,L1,R1:array[1..Nmax] of longint;
 A:array[1..Nmax] of char;
 N,M,Middle,L,R,i,j,k:longint;
 ch:char;

function Min(x,y:longint):longint;
begin
 if(x>y) then x:=y;
 Min:=x;
end;

BEGIN
 N:=0;
 read(ch);
 while(ord(ch)>=ord('a')) do begin
  inc(N);
  A[N]:=ch;
  read(ch);
 end;
 readln;

 inc(N);
 A[N]:='#';
 M:=N;
 read(ch);
 while(ord(ch)>=ord('a')) do begin
  inc(N);
  A[N]:=ch;
  read(ch);
 end;

 Z[1]:=N;
 R:=0;
 L:=0;

 for i:=2 to N do begin
  if(i<=r) then Z[i]:=min(R-i+1,Z[i-L+1])
  else Z[i]:=0;
  while(i+z[i]<=N)and(A[i+z[i]]=A[z[i]+1]) do inc(z[i]);
  if(i+z[i]-1>r) then begin
   L:=i;
   R:=i+z[i]-1;
  end;
 end;

 k:=0;
 L1[k]:=N+1;
 R1[k]:=N+1;

 i:=N;
 while(i>=M+1) do begin
  if(i+z[i]-1>=L1[k]-1) then begin
   inc(k);
   L1[k]:=i;
   R1[k]:=L1[k-1]-1;
  end;
  dec(i);
 end;

 if(L1[k]=M+1) then begin
  writeln('No');
  while(k>0) do begin
   for i:=L1[k] to R1[k] do write(A[i]);write(' ');
   dec(k);
  end;
 end
 else begin
  writeln('Yes');
 end;
END.