Solução por Anita Ramos
Iniciando a programação, após adicionar a biblioteca, declaramos as variáveis e vetores utilizados e lemos as linhas de entrada. Em seguida, até que toda a sequencia de letras de entrada seja percorrida, somamos 1 ao vetor de cada letra que aparece na entrada, de acordo com a sua posição na tabela e no alfabeto. Depois, temos um loop que soma o valor do vetor de cada letra do alfabeto a se esse valor for divisível por , ou seja, checamos se com a quantidade de todas letras podemos fazer vezes a mesma sequência. Por fim, temos a verificação se é possível criar uma sequência de acordo com a entrada (se ) e se sim partimos para a parte de imprimir uma sequência possível.
Se , imprime-se a própria sequência da entrada. Se não, enquanto imprimimos uma determinada letra de acordo com a quantidade de vezes que ela deve aparecer em uma "mini-sequência". Por exemplo, para a sequência "abababaaa" e , temos que uma possível mini-sequência é "aab", sendo que esta aparecerá 3 vezes (). Assim, "aabaabaab". Nesse exemplo, a cada mini-sequência, "a" deve aparecer 2 vezes e "b" apenas 1 vez. Essa lógica se passa alfabeticamente, de a-z, e é determinada pela quantidade de vezes que a letra aparece divido por , ou seja, (sendo letra o índice da letra no alfabeto).
Segue o código comentado para melhor compreensão da solução:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<bits/stdc++.h> | |
using namespace std; | |
int cont[27]; | |
int main() | |
{ | |
int k,res=0; | |
char palavra[1010]; | |
scanf("%d", &k); | |
scanf("%s[^\n]", palavra); | |
int tamanho = strlen(palavra); | |
for(int i=0; i<tamanho; i++) | |
{ | |
int letra=palavra[i]-96; | |
cont[letra]++; | |
} | |
for(int i=1; i<=26; i++) | |
if(cont[i]%k==0)res+=cont[i]; | |
if(res==tamanho) | |
{ | |
if(k!=1) | |
{ | |
while(k>0) | |
{ | |
for(int i=1; i<=26; i++) | |
{ | |
if(cont[i]>0) | |
{ | |
int vezes=cont[i]/k; | |
while(vezes>0) | |
{ | |
printf("%c",i+96); | |
cont[i]--; | |
vezes--; | |
} | |
} | |
} | |
k--; | |
} | |
} | |
else printf("%s",palavra); | |
} | |
else printf("-1"); | |
return 0; | |
} |