We could consider the predefined function
hash() from Python but, in order to ensure
replicability, we define instead the following very simple hash function
on strings. Given a positive integer MOD that
we call, of course, the modulus,
h = lambda s, MOD: sum(ord(c) for c in s) % MOD
How many strings, among a given set of them, can we pick up without
incurring in collisions under h? Which strings
form the maximal set(s) with this property?
You must write a program that receives the value of
MOD and a sequence of strings and finds sets
of strings from the sequence within which the strings do not have any
collision. These sets must be as large as possible. For instance, for
MOD = 7, the words "No" and "seguinte" both
hash to zero, so at most one of them can be chosen; likewise "dia" and
"morreu" both hash to 1 whereas "ninguem" hashes to 6.
First comes the positive integer MOD, then
a sequence of words separated by spaces or newlines and distributed
among lines in an unpredictable manner. There may be word repetitions in
the input: these are to be ignored as we work with
sets of words as we said.
All the sets of the maximum possible size, made of words taken from
the sequence, where the hash function h does
not generate collisions at all inside each set.
The sets can be printed in any order and the elements inside them can be printed in any order too. Separate the set elements by a space and print each set in a line as in the examples.
Author: José Luis Balcázar
Generation: 2026-01-25T13:27:15.489Z
© Jutge.org, 2006–2026.
https://jutge.org