Solução Informática - Nível Intermediário - Semana 12

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 ASCII e no alfabeto. Depois, temos um loop que soma o valor do vetor de cada letra do alfabeto a res se esse valor for divisível por k, ou seja, checamos se com a quantidade de todas letras podemos fazer k vezes a mesma sequência. Por fim, temos a verificação se é possível criar uma sequência de acordo com a entrada (se res = tamanho da sequencia) e se sim partimos para a parte de imprimir uma sequência possível.

Se k=1, imprime-se a própria sequência da entrada. Se não, enquanto k>0 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 k=3, temos que uma possível mini-sequência é "aab", sendo que esta aparecerá 3 vezes (k=3). 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 k, ou seja, \frac{cont[letra]}{k} (sendo letra o índice da letra no alfabeto).

Segue o código comentado para melhor compreensão da solução:


#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;
}

view raw

k-String.cpp

hosted with ❤ by GitHub