Arquivo fonte: L3Q1.java | L3Q1.c | L3Q1.cpp
Arquivo de entrada: L3Q1.in
Arquivo de saída: L3Q1.out
O arquivo de entrada consiste em vários
conjuntos de dados.
Cada conjunto de dados corresponde a um inteiro (0
< K < 10) na primeira linha e de várias outras linhas.
Cada linha contém uma string S (de tamanho K). S
é formada apenas por caracteres 'a', 'c', 't', 'g' em minúsculo.
O conjunto de dados em questão acabará com a
string "0".
O arquivo de entrada acabará no EndOfFile.
Imprima para cada conjunto de entradas a string
"Conjunto #n" (n é o conjunto atual), seguida de 4^K linhas.
Cada linha deverá ter o valor da posição HASH[i]
0 <= i < 4^K (se o valor não foi definido
imprimia -1). Em seguida imprimia uma linha em
branco.
NOTA: As strings deverão ser mapeadas de forma
a satisfazer a seguinte regra:
Para todo i1, i2 (índices no array): se i1 < i2 então s1 é
lexicograficamente menor que s2
Isso significa que a sua função que mapeia as strings em um índice, deve
gerar um índice menor para aquela string
que for lexicograficamente (ordem do dicionário) menor que a outra.
Exemplo para K = 2
f("aa") = 0
f("ac") = 1
f("ag") = 2
f("at") = 3
f("ca") = 4
f("cc") = 5
f("cg") = 6
f("ct") = 7
f("ga") = 8
f("gc") = 9
f("gg") = 10
f("gt") = 11
f("ta") = 12
f("tc") = 13
f("tg") = 14
f("tt") = 15
OBS:
Entrada exemplo:
2 tg ga cg gt 0 1 c t 0Saída exemplo correspondente à entrada acima:
Conjunto #1 -1 -1 -1 -1 -1 -1 cg -1 ga -1 -1 gt -1 -1 tg -1 Conjunto #2 -1 c -1 t
hash(k) = (a k) mod h, onde a = (8 ëh/23û) + 5
A função de double hash encontra-se na seção 6.5.2 do mesmo:
doubleHash(k, pos) = (pos + desloc) mod h, onde desloc(k) = 2k + 1 e pos é a posição da última colisão.
A função de saída para cada grupo será mostrada de acordo com a saída
exemplo.
A saída exemplo cobre TODOS os casos, logo não será necessário tratar
qualquer outro caso.
Entrada exemplo:
4 i 10 i 20 b 10 b 150 3 i 3 i 1027 b 1027 5 i 7 i 1036 b 7 b 12 i 12 0Saída da entrada acima:
Conjunto #1 10 inserido em 498 20 inserido em 996 10 encontrado em 498 150 inexistente Conjunto #2 3 inserido em 47 1027 inserido em 54 1027 encontrado em 54 Conjunto #3 7 inserido em 451 1036 inserido em 188 7 encontrado em 451 12 inexistente 12 inserido em 213obs.:
5 1 2 3 4 5 10 10 9 8 6 5 4 7 2 3 1 4 2 12 12 5Saída correspondente à entrada acima:
Conjunto #1 5 4 3 1 2 4 2 3 1 3 2 1 2 1 1 Conjunto #2 10 9 8 6 5 4 7 2 3 1 9 6 8 3 5 4 7 2 1 8 6 7 3 5 4 1 2 7 6 4 3 5 2 1 6 5 4 3 1 2 5 3 4 2 1 4 3 1 2 3 2 1 2 1 1 Conjunto #3 12 5 12 2 12 5 2 5 2 2