Ir ao conteúdo

Posts recomendados

Postado

Fala galera, beleza?

 

Seguinte, estou fazendo um desafio que foi proposto pela professora da minha cadeira de estrutura de dados, que seria fazer o desafio 1167 do URI Online Judge, mas usando listas encadeadas, eu consegui fazer, porém ele ta estourando o tempo limite, alguém tem uma sugestão do que eu poderia mudar no código para abaixar o tempo?

 

Segue o código

 

/*****************************************************************/
/* Acampamento de Férias                                         */
/* programador: Ruhan Ligabue                                    */
/* criado em: 30/09/2017                                         */
/* data da ultima alteracao: 06/10/2017                          */
/* https://www.urionlinejudge.com.br/judge/en/problems/view/1167 */
/*****************************************************************/

#include <stdio.h>

typedef struct{
    char nome[30];
    int valor;
}INFORMACAO;

typedef struct{
    INFORMACAO info;
    struct LISTA* ant;
    struct LISTA* prox;
}LISTA;


void cria_lista(LISTA** l);
void inclui_crianca (LISTA** l);
void entrada_dados (LISTA* aux);
void jogo(LISTA** l,int num);

int main(void){
    int i,num;
    LISTA* l;

    do{
        cria_lista(&l);
        do{
            printf("Digite o numero de criancas: ");
            scanf("%d",&num);
        }while(num < 1 || num > 101);

        for(i = 0; i < num; i++)
            inclui_crianca(&l);
        jogo(&l,num);
    }while(num != 0);
    return(0);
}

void cria_lista(LISTA** l){
  *l= NULL;
}

void entrada_dados(LISTA* aux){
    int count = 0;
    do{
        printf("Digite o nome e o numero da crianca: ");
        fflush(stdin);
        scanf("%s %d",&aux->info.nome, &aux->info.valor);
        while (aux->info.nome != '\0') {
            count++;
        }
    }while((aux->info.valor >= 1 || aux->info.valor <= 500)&&(count <= 30));
    aux->prox = NULL;
    aux->ant = NULL;
}

void inclui_crianca(LISTA** l){
    LISTA* p;
    LISTA* aux;
    LISTA* no = (LISTA *) malloc(sizeof(LISTA));

    p = *l;

    entrada_dados(no);
    if(*l == NULL){
        *l = no;
    }
    else{
        if(p->prox == NULL){
            no->prox = p;
            p->ant = no;
            p->prox = no;
        }
        else{
            aux = p->prox;
            aux->ant = no;
            p->prox = no;
            no->prox = aux;
            no->ant = p;
        }
    }
}

void jogo(LISTA** l,int num){
    LISTA* p;
    LISTA* aux;
    int i,j,rep;

    p = *l;
    j = p->info.valor;

    for(rep = num; rep > 0; rep--){
        if(j%2 == 0){
            for(i = 0;i <= j; i++)
                p = p->ant;
            j = p->info.valor;
            aux = p->ant;
            aux->prox = p->prox;
            aux = p->prox;
            aux->ant = p->ant;
        }
        else{
            for(i = 0;i <= j; i++)
                p = p->prox;
            j = p->info.valor;
            aux = p->ant;
            aux->prox = p->prox;
            aux = p->prox;
            aux->ant = p->ant;
        }
    }
    printf("Vencedor(a): %s\n",p->info.nome);
    free(p);
}

 

 

 

 

  • Curtir 1
  • 2 semanas depois...
Postado

Não sei se culpo o professor ou você.

Vou pelo básico.

1. No URI e em qualquer ferramenta de competição, não se conversa com o usuário, esse printf pedindo para digitar algo da erro, apenas leia com o scanf.

2. URI é uma ferramenta usada para competidor, se você pegar sua solução da aula e enviar no URI vai estourar o tempo, qualquer probleminha do URI de nível 2 já precisa de alguns conceitos matemáticos, aquela coisa de calcular número primo indo até o próprio número não existe no URI, não vai passar. Pesquise métodos rápidos para resolver aquilo que você já sabe.

3. Se o programa pede como resposta: Fatorial de x = y, e o seu printf colocar: O fatorial de x é y, vai dar erro.

4. Pelo amor de deus diz pra sua professora que não se usa C no URI, ele força o uso de ponteiros por parte do programador e isso é horroroso.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!