Anagrames

Dues paraules són anagrames si tenen exactament les mateixes lletres i en les mateixes quantitats. Per exemple, eat, ate i tea són anagrames entre elles, i també ho són listen, silent i enlist.

Feu un programa que llegeixi una seqüència de paraules i les classifiqui en grups d’anagrames. Per a cada grup, cal escriure les paraules ordenades alfabèticament. Els grups s’han d’escriure en un cert ordre (explicat a sota).

Observació

En aquest problema el centre d’interès és l’eficiència. Cal trobar una forma intel·ligent d’agrupar les paraules per evitar comparacions innecessàries.

Pista: Si ordenem les lletres d’una paraula, obtenim una mena de “signatura”. Per exemple, si ordenem les lletres de eat, ate i tea, obtenim aet en tots tres casos. Dues paraules són anagrames si i només si tenen la mateixa signatura. Aquesta signatura es pot fer servir com a clau d’un map.

Per ordenar les lletres d’un string s, es pot fer servir la funció sort de la llibreria <algorithm>:

#include <algorithm>
...
sort(s.begin(), s.end());

La sortida del programa ha d’estar ordenada per la signatura de cada grup, que correspon a l’ordre de les claus del map.

Entrada

L’entrada és una seqüència de paraules (en minúscules, sense espais interns), una per línia, acabada per fi d’entrada.

Sortida

Per a cada grup d’anagrames, s’escriu una línia amb la signatura del grup (les lletres ordenades), seguida de : i un espai, i a continuació les paraules del grup ordenades alfabèticament i separades per espais. Els grups s’escriuen en ordre de signatura.

Informació del problema

Autoria: Pau Fernández

Generació: 2026-03-24T11:35:39.958Z

© Jutge.org, 2006–2026.
https://jutge.org