TÓPICO

PROBLEM 1523 - URI Fórum 1.0

URI Online Judge perguntou 7 years ago

URI Online Judge Fórum 1.0

MOD

Este tópico foi resolvido e não pode receber novas respostas.

  • Heveraldo Rodrigues de Oliveira respondido 4 years ago

    No exemplo: 4 4 1 5 3 7 7 3 9 10

    é possível chegar 7 e sair 3?

  • Everaldo Euzébio de Oliveira respondido 6 years ago

    Amigos do UrionlineJudge, é possível obter os casos de teste, para testar o programa antes, de enviar? Fazendo os testes manualmente consegui sucesso, mas ao submeter recebi , Wrong answer e Wrong answer (100%)

  • Everaldo Euzébio de Oliveira respondido 6 years ago

    Pessoal estou com uma dúvida quanto ao julgamento do exercício, fiz a submissão e recebi Wrong answer (10%), fiz algumas alterações e fiz a submissão novamnete e recebi Wrong answer (70%), a minha dúvida é sobre o percentual.

    Wrong answer (10%) = Significa que acertei 10% do exercício ou errei 10%?

    Se alguém puder esclarecer eu agradeço.

  • Everaldo Euzébio de Oliveira respondido 6 years ago

    Pessoal alguém pode testar esse caso de teste que criei com o programa, e nos dizer se a resposta é sim o não, fiz na mão mesmo, e na teoria esse caso de teste a saída é sim, mas no meu código está dando não...., provavelmente por erro de lógica, estou tentando consertar...

    10 5

    1 30 2 28 4 20 6 15 8 10 10 12 13 14 20 27 21 26 22 25

    Obrigado....

  • Unknown respondido 4 years ago

    O resultado não coincidiu para todos as Entradas do uDebug.

  • Felipe Derkian respondido 4 years ago

    alguem pode me ajudar?

    60% de erro , fiz os teste que tem no fórum e passou em todas..

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(){
    
        int qtd_carros , qtd_vagas;
    
        while(scanf("%d %d",&qtd_carros,&qtd_vagas)){
    
            if(qtd_carros == 0 && qtd_vagas == 0){
                return 0;
            }
    
            int vet_entrada[qtd_carros] , vet_saida[qtd_carros];
            int i;
    
            for(i=0;i<qtd_carros;i++){
                scanf("%d %d",&vet_entrada[i],&vet_saida[i]);
            }
            int j;
    
            int tot_cont =0;
            for(i=qtd_carros-2;i>=0;i--){
               if(vet_saida[i]<vet_entrada[i+1]){              
                    vet_entrada[i] = vet_entrada[i+1];
                    vet_saida[i] = vet_saida[i+1];
                    tot_cont++;
               }
               else if(vet_saida[i] > vet_entrada[i+1] && vet_saida[i] > vet_saida[i+1]){
                    tot_cont++;                
                    i= i-2;
               }
               else if(vet_saida[i] == vet_entrada[i+1]){               
                    vet_entrada[i] = vet_entrada[i+1];
                    vet_saida[i] = vet_saida[i+1];
                    tot_cont++;
               }
    
           }
    
            if(tot_cont == qtd_vagas){
                printf("Sim\n",tot_cont,qtd_vagas);
            }
            else{
                printf("Nao\n",tot_cont,qtd_vagas);
            }
    
        }
    
    }
    MOD
  • Igor Carpanese respondido 5 years ago

    Alguns casos de teste para ajudar:

    3 2
    1 10
    2 5
    6 9
    3 2
    1 10
    2 5
    6 12
    3 2
    1 2
    2 3
    3 4
    10 5
    1 30
    2 28
    4 20
    6 15
    8 10
    10 12
    13 14
    20 27
    21 26
    22 25
    4 4
    1 5
    3 7
    7 3
    9 10
    3 2
    1 10
    2 11
    3 12
    3 2
    1 12
    2 11
    3 10
    2 1
    1 5
    5 10
    2 1
    1 5
    6 10
    2 1
    1 5
    4 10
    0 0

    Saída esperada:

    Sim
    Nao
    Sim
    Sim
    Nao
    Nao
    Nao
    Sim
    Sim
    Nao
  • Pablo Leyes respondido 5 years ago

    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 1000
    
    struct Carro{
        int Saida, Chegada;
    };
    
    typedef struct pilha{
        int topo;
        struct Carro Carros[MAX];
    }Pilha;
    
    Pilha* Cria(){
        Pilha *P = (Pilha*)malloc(sizeof(Pilha));
        P->topo = -1;
        return P;
    }
    
    int EVacio(Pilha* P){
        return (P->topo == -1);
    }
    
    int Cheia(Pilha* P){
        return (P->topo == MAX-1);
    }
    
    void Vaciar(Pilha* P){
        P->topo = -1;
    }
    
    int push(Pilha* P, struct Carro X){
        if(!Cheia(P)){
            P->topo++;
            P->Carros[P->topo] = X;
            return 1;
        }
        return 0;
    }
    
    int pop(Pilha *P, struct Carro X){
        if(!EVacio(P)){
            X = P->Carros[P->topo];
            P->topo--;
            return 1;
        }
        return 0;
    }
    
    int tamanho(Pilha* P){
        if(P == NULL)
            return -1;
        else
            return P->topo;
    }
    
    int main(){
        Pilha *P;
        struct Carro X, Y;
        int n, i, k, time=-1, Z;
        P = Cria();
        scanf("%d %d",&n, &k);
        while( n!=0 && k!=0){
            for(i=0;n>i;i++){
                scanf("%d %d", &X.Chegada, &X.Saida);
                time = X.Chegada;
                if(time>Z){
                    pop(P,Y);
                }
                push(P,X);
                if((tamanho(P)+1)>k){
                    printf("Nao\n");
                    break;
                }
                Z = X.Saida;
                if((i+1)==n){
                    printf("Sim\n");
                }
            }
    
            Vaciar(P);
            scanf("%d %d",&n, &k);
        }
        return 0;
    }

    Ta dando erro de time limit

  • Matheus Carvalho respondido 6 years ago

    WA 60% mas não sei onde está o erro, pois de vários casos de teste que fiz deram o resultado certo! quem puder ajudar, grato desde já!

    import java.util.Scanner;
    import java.util.Stack;
    
    public class Main {
        private static Scanner ler;
        public static void main(String[] args) {
            ler = new Scanner(System.in);
            Stack<Integer> pEntrada = new Stack<Integer>();
            Stack<Integer> pSaida = new Stack<Integer>();
            int entra = 0;
            int sai = 0;
            int N;
            int K;
            int vagas = 0;
    
            while ((N = ler.nextInt()) > 0 && (K = ler.nextInt()) > 0) {
                String result = "";
                vagas = K;
                for (int i = 0; i < N; i++) {
                    entra = ler.nextInt();
                    sai = ler.nextInt();
    
                    if (pEntrada.isEmpty()) {
                        pEntrada.push(entra);
                        pSaida.push(sai);
                        vagas--;
                    } else if (vagas > 0) {
                        pEntrada.push(entra);
                        pSaida.push(sai);
                        vagas--;
                    } else if (!pEntrada.isEmpty() && (int) pSaida.peek() <= entra) {
                        while (!pEntrada.isEmpty() && (int) pSaida.peek() <= entra) {
                            pEntrada.pop();
                            pSaida.pop();
                            vagas++;
                        }
                        pEntrada.push(entra);
                        pSaida.push(sai);
                        vagas--;
                    }
                }
    
                while (pSaida.size() > 1) {
                    entra = (int) pEntrada.pop();
                    sai = (int) pSaida.pop();
                    if ((int) pSaida.peek() < sai) {
                        result = "Nao";
                        break;
                    } else {
                        result = "Sim";
                    }
    
                }
                System.out.println(result);
                pEntrada.removeAllElements();
                pSaida.removeAllElements();
            }
        }
    }
  • Andressa Julio respondido 6 years ago

    Boa noite!

    Meu código só acusa "Time Limit Exceeded". Como faço para saber o tempo ideal, e o que pode ser melhorado no código?

  • Allan Herculano respondido 6 years ago

    #include <stdio.h>
    
    int main()
    {
        long int i,j,c[100000],s[100000];
        int n,v,fail=0;
        while(1){
            scanf("%d %d",&n,&v);
            if(n==0 || v==0)
                return 0;
            fail = 0;
            for(i=0;i<n;i++){
                scanf("%ld %ld",&c[i],&s[i]);
                if(i>0){
                    if(c[i]<s[i-1]&&v==0)
                        fail++;
                    if(c[i]>=s[i-1]){
                        v++;
                    }
                    for(j=i-1;j>=0;j--)
                        if(s[i]>s[j]&&c[i]<s[j])
                            fail++;
                }
            }
            if(fail>0)
                printf("Nao\n");
            else
                printf("Sim\n");
        }
        return 0;
    }
  • Diegao89 respondido 6 years ago

    Cheguei nos 10%, mas não acho o caso erro... alguém tem ideia do que pode ser?

    #include <stdio.h>
    #include <string.h>
    #define MAX_PILHA 1001
    #define max(A,B) ((A>B) ? (A):(B))
    
    int chegada[100001], saida[100001];
    int k;
    
    typedef struct pilha {
        int dados[MAX_PILHA];
        int topo;    
    } t_pilha;
    
    void inicia_pilha(t_pilha *);
    void empilha(int, t_pilha *);
    int desempilha(t_pilha *);
    int pilha_vazia(t_pilha);
    int pilha_cheia(t_pilha);
    int tamanho(t_pilha);
    
    int main() {
      t_pilha pilha;
      inicia_pilha(&pilha);
      int n, c, s;
    
      while(1) {
        // lendo
        scanf("%d %d", &n, &k);
        if(n<3 || k<1) break;
    
        memset(chegada, 0, sizeof(chegada));
        memset(saida, 0, sizeof(saida));
    
        int ultimo_tempo = 0;
        int i;
        for(i=1; i<=n; i++) {
          scanf("%d %d", &c, &s);
    
          chegada[c] = i;
          saida[s] = i;
          ultimo_tempo = max(ultimo_tempo, s+1);
        }
    
        while(!pilha_vazia(pilha)) desempilha(&pilha);
    
    int j;
    for(j=1;j<ultimo_tempo;j++){
    
      if(saida[j]){
        if(pilha_vazia(pilha) || pilha.topo == saida[j]){
          break;
        }
        else{
          desempilha(&pilha);
        }
      }
    
          if(chegada[j]){
            if(tamanho(pilha) < k){
              empilha(chegada[j], &pilha);
            }
            else{
              break;
            }
          }
        }
        printf("%s\n", j == ultimo_tempo ? "Sim" : "Nao");
      }
    }
    
    void inicia_pilha(t_pilha *p){
        p->topo = -1;
    }
    
    int pilha_vazia(t_pilha p){
        return(p.topo == -1);
    }
    
    int pilha_cheia(t_pilha p){
        return (p.topo == MAX_PILHA-1);
    }
    
    int tamanho(t_pilha p){
        return p.topo+1;   
    }
    
    void empilha(int i, t_pilha *p){
        p->topo++;
        p->dados[p->topo] = i;        
    }
    
    int desempilha(t_pilha *p){
        int i = p->dados[p->topo];
        p->topo--;
        return i;
    }
  • Caio Russi respondido 6 years ago

    Você mesmo pode gerar casos de teste arbitrários e comparar a saída do teu código com a do toolkit. Aqui está um link que pode te ajudar nisso: http://crbonilha.blogspot.com.br/2013/0 ... teste.html

  • Diegao89 respondido 6 years ago

    Não consigo sair dos 70%

    #include <stdio.h>
    #include <string.h>
    #define MAX_PILHA 1001
    #define max(A,B) ((A>B) ? (A):(B))
    
    int chegada[1000010], saida[1000010];
    int k;
    
    typedef struct pilha {
        int dados[MAX_PILHA];
        int topo;    
    } t_pilha;
    
    void inicia_pilha(t_pilha *);
    void empilha(int, t_pilha *);
    int desempilha(t_pilha *);
    int pilha_vazia(t_pilha);
    int pilha_cheia(t_pilha);
    int tamanho(t_pilha);
    void mostra_pilha(t_pilha, char *);
    
    int main() {
      t_pilha pilha;
      inicia_pilha(&pilha);
      int n, c, s;
    
      while(1) {
        // lendo
        scanf("%d %d", &n, &k);
        if(!n) break;
    
        // limpando
        memset(chegada, 0, sizeof(chegada));
        memset(saida, 0, sizeof(saida));
    
        // lendo
        int ultimo_tempo = 0;
        int j;
        for(j=1; j<=n; j++) {
          scanf("%d %d", &c, &s);
    
          chegada[c] = j;
          saida[s] = j;
          ultimo_tempo = max(ultimo_tempo, s+1);
        }
    
        // limpando
        while(!pilha_vazia(pilha)) desempilha(&pilha);
    
        //processando
        int i;
        for(i=1;i<ultimo_tempo;i++){
          //saida
          if(saida[i]) {
           printf("Entrei no if saída %d \n", i);
           if(pilha_vazia(pilha) || pilha.topo != saida[i]) {
            printf("Entrei no if break %d \n", i);
            break;
          } else {
            printf("Entrei no else desempilha\n");
            desempilha(&pilha);
          }
        }
    
        // chegada
        if(chegada[i]) {
          printf("Entrei no if chegada %d \n", i);
          if(tamanho(pilha) < k) {
            printf("Entrei no if empilha %d \n", i);
            empilha(chegada[i], &pilha);
          } else {
              printf("Entrei no else break\n");
              break;
            }
          }
        }
    
        printf("%s\n", i == ultimo_tempo ? "Sim" : "Nao");
      }
    }
    
    void inicia_pilha(t_pilha *p){
        p->topo = -1;
    }
    
    int pilha_vazia(t_pilha p){
        return(p.topo == -1);
    }
    
    int pilha_cheia(t_pilha p){
        return (p.topo == MAX_PILHA-1);
    }
    
    int tamanho(t_pilha p){
        return p.topo+1;   
    }
    
    void empilha(int i, t_pilha *p){
        p->topo++;
        p->dados[p->topo] = i;        
    }
    
    int desempilha(t_pilha *p){
        int i = p->dados[p->topo];
        p->topo--;
        return i;
    }
    
    void mostra_pilha(t_pilha p, char *msg){
        int i;
        printf("\n%s\n", msg);
        if(pilha_vazia(p)){
            printf("Vazia\n\n");
        }
        else{
            for(i=p.topo; i>=0; i--){
                printf("\n%d", p.dados[i]);
            }
            printf("\n\n");
        }
    }
  • Domitila Crispim Pietropaolo respondido 6 years ago

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stack>
    using namespace std;
    int main (){
            stack <int> est;
            int  b, y, f, e, g, c, d;
            while (1){
                scanf ("%d %d", &b,  &c);
                if (b==0){
                    break;
                }
                int  v=0;
                for (d=0; d<b; d++){
                    scanf ("%d %d", &e, &f);
                    if (est.size()==0){
                        est.push(f);
                    }
                    else {
                        for (g=0; g<est.size(); g++){
                                if (est.top()>e && f>est.top()){
                                        v++;
    
                                        break;
                                }
                                if (est.top()<e && est.size()>0){
                                    est.pop();
                                }
                                if (est.top()>e && est.top()>f){
                                    est.push(f);
    
                                    break;
                                }
                        }
                        if (est.size()>c){
                            v++;
    
                        }
    
                    }
                }
                if (v!=0){
                    puts("Nao");
                }
                if (v==0){
                    puts("Sim");
                }
            }
    }

    Runtime Error

  • Domitila Crispim Pietropaolo respondido 6 years ago

    #include <stdio.h>
    #include <string.h>
    
    int main(){
        int a, b, c, di[1001], top,v=1, e, tm, d;
        while(1){
            scanf ("%d %d", &a, &b);
            if (a==0){
                break;
            }
            top=0;
            tm=0;
            v=1;
            di[0];
            for (c=0; c<a; c++){
                scanf ("%d %d", &e, &d);
                if (e>top){
    
                    for (int g=tm-1; g>-2; g--){
                        if (e>di[g] && d>di[g]){
                            di[g]=0;
    
                            tm--;
                        }
                        if (e<di[g] && d<di[g]){
                                top=d;
                                di[tm]=d;
                                tm++;
    
                                break;
                        }
                        if (e<di[g] && d>di[g]){
                                v--;
    
                                break;
                        }
                    }
                }
                if (e<top && d>top){
                    v--;
                }
                if (e<top && d<top){
                    top=d;
                    di[tm]=d;
                    tm++;
                }
    
            }
            if(v<1){
                printf ("Nao\n");
            }
            if (v==1){
                puts("Sim");
            } 
        }
    }

    WA 40%

  • Omero Francisco Bertol respondido 7 years ago

    Boa tarde,

    Alguem poderia me passar o caso de teste para o qual minha solução está apresentando resposta errada ?

    Wrong answer (70%) ---- RESOLVIDO (não estava verificando se a pilha estava vazia).

    Obrigado.