Faça um programa em Free Pascal que leia um número natural 0 < n ≤ 100 e em seguida leia uma sequência de n números também naturais. Seu programa deve verificar se existem duas subsequências iguais nesta sequência com tamanho pelo menos 2. O tamanho da sequência encontrada deverá ser máximo, se ela existir. Caso exista, seu programa deve imprimir o valor do ı́ndice i e do tamanho máximo da sequência m, nesta ordem, onde i é a primeira ocorrência da sequência que possui uma cópia na sequência original e m é o tamanho desta sequência que se repete. Caso contrário seu programa deve imprimir "nenhuma".
Os casos de teste não conterão entradas com mais de uma subsequência igual.
Exemplo de entrada 1:
8
7 9 5 4 5 5 4 6
Saı́da esperada para a entrada acima:
3 2
Exemplo de entrada 2:
12
2 7 9 5 2 5 4 8 6 2 5 4
Saı́da esperada para a entrada acima:
5 3
Sugestão:
Use como base para sua implementação a seguinte estrutura inicial de programa, que contém o programa principal e algumas funções e procedimentos que visam facilitar o seu trabalho. Evidentemente você pode ignorar esta sugestão. Caso aceite, você deve implementar as funções e procedimentos, o programa principal não deveria ter que ser alterado, a princı́pio. Você pode também decidir usar mais funções e procedimentos caso perceba que seu programa ficará mais legı́vel.
program escolha_um_nome_bom;
const MAX = 100;
type vetor = array [1..MAX] of longint;
var
v : vetor;
n, pos, tamanho_subsequencia: longint;
procedure ler_vetor (var v: vetor; n: longint);
(* procedure para ler um vetor "v" de "n" inteiros *)
function tem_subsequencia_iguais (var v: vetor; n, tam_seg: longint): longint;
(*
recebe uma subsequencia "v" que em tamanho "n" e procura por subsequencias
iguais de tamanho "tam_seg". A funcao devolve zero se nao encontrou
subsequencias iguais ou devolve a posicao do inicio da primeira subsequencia
que encontrou.
*)
(* programa principal *)
begin
read (n);
// tamanho da subsequencia a ser lido
ler_vetor (v,n);
pos:= 0;
tamanho_subsequencia:= n div 2; // inicia com maior valor possivel
while (pos = 0) and (tamanho_subsequencia >= 2) do