Ir ao conteúdo

Posts recomendados

Postado

Preciso fazer esse código em C. Alguém poderia me ajudar.

 

A professora Maryam está tentando construir um código constituído de uma sequência de N cadeias de 10 letras minúsculas, S1,S2,S3,…,SN. Essas cadeias da sequência serão, no futuro, concatenadas de diversas maneiras para formar cadeias maiores. Mas, para que o código seja válido, a sequência de cadeias tem que satifazer uma propriedade bastante específica: nenhuma cadeia da sequência pode ser subcadeia de uma concatenação de duas cadeias anteriores na sequência. De forma mais rigorosa, o código será inválido se existirem três inteiros a, b e k, tais que:

1 ≤ a < k ≤ N, 1 ≤ b < k ≤ N (a pode ser igual a b); e

Sk é subcadeia da concatenação SaSb.

Por exemplo, o código S={aaaaaaabbb,yyuudiwwkl, kkfidaaooa} é válido. Mas se adicionarmos a cadeia aooaaaaaaa no final da sequência, o código resultante, S‘={aaaaaaabbb,yyuudiwwkl, kkfidaaooa, aooaaaaaaa}, será inválido, pois S‘4 é subcadeia da concatenação S‘3S‘1.

Dada a sequência de cadeias, seu programa deve determinar se o código é válido, ou não.

Entrada

A primeira linha da entrada contém um inteiro N, representando o número de cadeias na sequência. As N linhas seguintes contêm, cada uma, uma cadeia de 10 letras minúsculas, definindo a sequência de cadeias do código.

Saída

Seu programa deve imprimir uma linha contendo a cadeia "ok" caso o código seja válido, ou contendo a primeira cadeia na sequência que invalida o código. Quer dizer, contendo Sk onde k é o menor possível tal que Sk seja subcadeia de uma concatenação de duas cadeias anteriores na sequência.

Restrições

1 ≤ N ≤ 10000

Informações sobre a pontuação

Em um conjunto de casos de teste somando 40 pontos, N ≤ 100

 

Exemplos

Entrada

3

aaaaaaabbb

yyuudiwwkl

kkfidaaooa

Saída

ok

 

Entrada

4

aaaaaaabbb

yyuudiwwkl

kkfidaaooa

aooaaaaaaa

Saída

aooaaaaaaa

 

Entrada

1

jfjshiddds

Saída

ok

 

 

 

  • Amei 1
Postado

@devair1010 OI tudo bem, esse exercício e da OBI,

Esse e o link: https://olimpiada.ic.unicamp.br/pratique/p2/2017/f3/codigo/

tentei fazer porém não funcionou:

#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include <string.h> 

#define MAX 10
char buf;
int N;
char prefixo[MAX+1],sufixo[MAX+1];

int main(int argc, char *argv[]) {
	int N;
	int i, k;
	char pref, suf;
	
	scanf("%d", &N);
    for ( i = 0; i < N; i++ ){
    scanf("%s", &buf);

    for ( k = MAX; k > 0; k-- ){
      if ( sufixo[k] > 0 ){
	if ( k == MAX ){
    printf("%s",&buf );
	  return 0;
	} else {
	  if ( prefixo[MAX-k] > 0 ){
	    printf("%s",&buf );
	    return 0;
	  }
	}
      }
    }
    for ( k = MAX; k >= 0; k-- ){
      if ( k < MAX && k > 0 ){
	prefixo[k];
      }
      if ( k < MAX ){
	sufixo[MAX-k];
      }
    }
    
  }
  
printf( "ok" );
      


	return 0;
}

  

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...