Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Entre para seguir isso  
Ruhan Ligabue

C Melhorar o desempenho do programa

Recommended Posts

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

 

 

 

 

Editado por Simon Viegas
Antes de postar um código, favor pressionar o botão <>
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×