TEMA

PROBLEM 1245 - URI Fórum 1.0

URI Online Judge preguntado 8 years ago

URI Online Judge Fórum 1.0

MOD

Este tema fue resuelto y no puede recibir nuevas respuestas.

  • [Ahozinho com Feijão] Jhúlia Graziella respondido 4 years ago

    Pelo enunciado: "A entrada é composta por diversos casos de teste e termina com final de arquivo (EOF)" Seu código considera apenas uma única entrada!

    Tente trocar a leitura para:

    while(scanf("%d", &boots) != EOF) { //resto do código aqui }

    E não se esqueça de zerar os vetores dentro desse while (após cada leitura). Seu código também tá imprimindo uma linha a mais do que deveria...

    Além disso dá uma olhada nos seus for's que zeram o vetor, ele nunca tá zerando de verdade, tem um errinho ali =)

  • Ariel Narciso respondido 5 years ago

    Pessoal meu código ta dando 90% WA também. Testei com todos os casos de teste vistos aqui no fórum e sempre deu o resultado esperado. Por favor, me mostrem o meu erro.

    Segue o código:

    #include <stdio.h>
    //#include <stdlib.h>
    
    int main()
    {
        FILE *file;
        file = fopen("teste.txt", "r");
    
        int n;
    
        while (scanf("%d", &n) != EOF) {
    
            int m, pe[31][2], i, j;
            char l;
    
            for (i = 0; i < 31; i++)
                for (j = 0; j < 2; j++)
                    pe[i][j] = 0;
    
            while (--n >= 0) {
    
                scanf("%d %c", &m, &l);
                getchar();
    
                if (l == 'D')
                    pe[m-30][0] = 1;
    
                else
                    pe[m-30][1] = 1;
            }
    
            int qtd = 0;
    
            for (i = 0; i < 31; i++)
                if (pe[i][0] == 1 && pe[i][1] == 1)
                    qtd++;
    
            printf("%d\n", qtd);
        }
    
        return 0;
    }
  • Vitor Batista Campos de Souza respondido 6 years ago

    Meu programa está dando Runtime error, alguém sabe porque??

    #include "stdio.h"
    #include "iostream"
    
    int main()
    {
        int n, m, d[100], e[100], i, j, p=0, id=0, ie=0;
        char l;
    
        while(scanf("%d", &n) != EOF)
        {
            for(i = 0 ; i<n ; i++)
            {
                scanf("%d %c", &m, &l);
                if(l == 'D')
                {
                    d[id] = m;
                    id++;
                }
                else
                {
                    e[ie] = m;
                    ie++;
                }
            }
            for(i=0;i<id;i++)
            {
                for(j=0;j<ie;j++)
                {
                    if(d[i] == e[j])
                    {
                        p++;
                        e[j] = 0;
                        d[i] = 0;
                        break;
                    }
                }
            }
            printf("%d\n", p);
            id = 0;
            ie = 0;
            p = 0;
        }
        return 0;
    }
  • Gabriel F. Immich respondido 8 years ago

    Boa tarde, estou tendo Time limit exceeded e não consigo encontrar o problema, alguém poderia ajudar? Segue?

    #include <cstdlib>
    #include <iostream>
    #include <stdio.h>
    #include <cstdio>
    
    int main()
    {
        int cont, cont2, pares=0;
        int x;
        while (scanf ("%i", &x)!= EOF && (x%2==0)) {
              pares = 0;
              int numero [x];
              char pe [x];
              for (cont = 1; cont <= x; cont++) {
                  scanf ("%i", &numero [cont]);
                  scanf ("%s", &pe [cont]);
              }
              for (cont=1; cont <= x; cont++) {
                  for (cont2=1; cont2<=x; cont2++) {
                      if (numero [cont] == numero [cont2] && pe [cont] != pe [cont2]) {
                         pares ++;
                         numero [cont] = 0;
                         numero [cont2] = 0;
                         pe [cont] = NULL;
                         pe [cont2] = NULL;
                      }
                  }
              }
              printf ("%i\n", pares);           
        }      
    }
  • Caio Torrez respondido 4 years ago

    Álguem conseguiu resolver em Python 2.7 ?

  • Unknown respondido 4 years ago

    Vlw, vou tentar desse jeito

  • Unknown respondido 4 years ago

    Olá, estou recebendo "Wrong Answer(10%)" tentei mudar algumas coisas no código mas sem sucesso

    Alguém pode me ajudar?

    #include <stdio.h>
    
    int boots,bootsize,i,pairs;
    char L;
    int bootl[61];
    int bootr[61];
    int main()
    {
        for(i=30; i<=60; i++);
        {
            bootl[i]=0;
        }
    
        for(i=30; i<=60; i++);
        {
            bootr[i]=0;
        }   
    
        scanf("%d", &boots);
        pairs=0;
    
        for(i=1; i<=boots; i++)
        {   
            scanf("%d %c", &bootsize, &L);
    
            if (L=='D')
            {
                bootr[bootsize]++;
                if (bootl[bootsize] != 0)
                {
                    do
                    {
                        pairs++;
                        bootl[bootsize]--;
                        bootr[bootsize]--;
                    } while (bootl[bootsize]!=0 && bootr[bootsize]!=0);
                }
            }
            else
            {
                bootl[bootsize]++;
                if (bootr[bootsize] != 0)
                {
                    do
                    {
                        pairs++;
                        bootl[bootsize]--;
                        bootr[bootsize]--;
                    } while (bootl[bootsize]!=0 && bootr[bootsize]!=0);
                }
            }
    
        }
        printf("%d\n", pairs);
        printf("\n");
        return 0;
    }
  • zarjitsky respondido 4 years ago

    Glr o meu está dando wa 100% mas em todos os casos testes que eu faço aqui da certo alguem sabe oque pode estar acontecendo?

    n=input()
    lista=[]
    par=0
    for i in range(n):
        sap=raw_input()
        lista.append(sap.split(' '))
    for i in range(len(lista)):
        for j in range(len(lista)):
            if lista[i][1]=='0':
                continue
            if i!=j and lista[i][0]==lista[j][0] and lista[i][1]!=lista[j][1]:
                if lista[j][1]=='0':
                    continue
                par+=1
                lista[i][1]='0'
                lista[j][1]='0'
    print '%i' %par
  • Gabriel Duarte respondido 5 years ago

    Quando vc está apagando o elemento acaba apagando mais gente que deveria.

    7
    40 D
    40 D
    40 D
    41 E
    41 D
    40 E
    40 E
    MOD
  • Gabriel Resende Machado respondido 5 years ago

    Oi pessoal, gostaria de saber o que está errado no meu código para dar 90% W.A. Realizei vários casos de teste e todos passaram...

    #include <iostream>
    #include <iomanip>
    #include <stdio.h>
    #include <math.h>
    #include <vector>
    #include <map>
    #include <sstream>
    #include <stack>
    #include <set>
    #include <algorithm>
    #include <string.h>
    #include <functional>
    #include <climits>
    #include <cmath>
    
    using namespace std;
    
    int main(int argc, char** argv)
    {
        int nPares;
        while (scanf("%d",&nPares) == 1)
        {
            map<int,char> pares; int numeroPares = 0;
            for (int i = 0; i < nPares; i++)
            {
                int numero; char pe; scanf("%d %c",&numero, &pe);
    
                if (pares.find(numero) == pares.end())
                    pares.insert(pair<int,char>(numero,pe));
    
                else if (pares[numero] != pe)
                {
                    numeroPares++;
                    pares.erase(numero);
                }
            }
            printf("%d\n",numeroPares);
        }
    }
  • Abhishek respondido 5 years ago

    include

    using namespace std;

    int main() { int n; short unsigned dBoots[31],eBoots[31];

    for(short unsigned i=0;i<31;i++)
    {
        dBoots[i] = 0;
        eBoots[i] = 0;
    }
    
    for(cin>>n;n;cin>>n)
    {   
        for(short i=0;i<n;i++)
        {
            short unsigned num;
            char ch;
    
            cin >> num;
            cin >> ch;
    
            switch(ch)
            {
                case 'D': dBoots[num-30]++;
                break;
    
                case 'E': eBoots[num-30]++;
                break;
            }
        }
    
        short unsigned count = 0;
        for(short i=0;i<31;i++)
        {
            if(dBoots[i] > 0 && eBoots[i] > 0)
            {
                if(dBoots[i] < eBoots[i])
                    count = count + dBoots[i];
                else
                    count = count + eBoots[i];
            }
            dBoots[i] = 0;
            eBoots[i] = 0;
        }
    
        cout << count << endl;
    }
    return 0;

    }

  • Caíque Rezende respondido 5 years ago

    Why wrong answer?

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
        int n, i, M, cont;
        char L;
    
        while(cin >> n)
        {
            stack<char> pilha[100];
    
            cont = 0;
    
            for(i=0; i<n; i++)
            {
                cin >> M >> L;
    
                if(pilha[M].empty())
                {
                    pilha[M].push(L);
                }
    
                if(!pilha[M].empty())
                {
                    if (L == pilha[M].top())
                    {
                        pilha[M].push(L);
                    } else {
                        pilha[M].pop();
                        cont++;
                    }
                }
            }
    
            cout << cont << endl;
    
        }
    }
  • [Suicide Squad] Eliu Moraes respondido 5 years ago

    Estou tendo um "Runtime Error" ao enviar o problema, será que alguém saberia me ajudar?

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
    
        int *e,*d;
        int i,x,z,n,f=0;
        char l;
        e = (int*) calloc(n,sizeof(int));
        d = (int*) calloc(n,sizeof(int));
        scanf("%d",&n);
    
        for(i=0;i<n;i++){
            scanf("%d %c",&x,&l);
            if(l=='D'){
                d[i]=x;
            }
            else{
                e[i]=x;
            }   
            x=0;    
        }
    
        for(i=0;i<n;i++){
            for(z=0;z<n;z++){
                if(d[i]!= 0 && d[i]==e[z]){
                    d[i]=0;
                    e[z]=0;
                    f++;
                }
            }       
        }
    
        printf("%d\n",f);
    
        return 0;
    }
  • Samuel Silvino respondido 6 years ago

    [size=110:28zntkz2]Tentei seguir ao máximo sua dica, mas continuo recebendo Time Limit Exceed. Nesse caso criei dois vetores com os valores do calçado em se respectivo vetor, após isso comparo todos e sempre que encontro um par, coloco um 0 em seu lugar, para que não seja comparado novamente. 'qtdd' e 'qtde' representam a quantidade de sapatos direitos e esquerdos, respectivamente.[/size:28zntkz2]

    #include<stdio.h>
    
    int verifica(int *vetor, int tam, int num)
    {
        int i;
        for (i=0;i<tam;i++)
            if (num == vetor[i])
            {
                vetor[i] = 0;    // para que não seja comparado novamente
                return 1;
            }
        return 0;
    }
    
    int main()
    {
        char pe;
        int esquerdo[10000], direito[10000], i, j, qtd, numero, qtde, qtdd, teste;
        while ((scanf("%d", &teste)) != EOF)
        {
            i = j = qtd = 0;
            while (teste)
            {
                scanf("%d %c", &numero, &pe);
                if (pe == 'E')
                {
                    esquerdo[i] = numero;
                    i++;
                }
                else if (pe == 'D')
                {
                    direito[j] = numero;
                    j++;
                }
                qtde = i;
                qtdd = j;
                for (i=0;i<qtdd;i++)
                    qtd += verifica(esquerdo, qtde, direito[i]);
            teste -= 1;
            }
        printf("%d\n", qtd);
        }
    return(0);
    }
  • Denis Costa respondido 6 years ago

    Vou tentar ajudar sem entregar muita coisa da resposta.

    Os tamanhos das botas variam de 30 até 60. Então você só tem 31 tamanhos diferentes. O que recomendo é ter um array para o pé direito com 31 posições, e outro para o pe esquerdo com o mesmo tamanho. Se você usar esse mesmo array para armazenar as leituras das botas, onde o índice é o tamanho, o seu último for roda 31 vezes e não N vezes.

    MOD
  • Samuel Silvino respondido 6 years ago

    [size=125:3sgaeoxn]Bom dia! Alguém poderia me ajudar? Meu código dá certo para todos os casos teste, mas dá time limit exceed, alguém poderia me ajudar? Obrigado desde já! :) [/size:3sgaeoxn]

    Eu armazeno num vetor do tipo struct todas as botas e após isso comparo-as conferindo se formam um par, se sim, é acrescentado o contador.

    #include<stdio.h>
    
    struct calcado{
        char pe;
        int num;
    };
    
    int main()
    {
        int teste, i, j, qtd;
        struct calcado botas[10001];
        while ((scanf("%d", &teste)) != EOF)
        {
            for (i=0;i<teste;i++)
            {
                scanf("%d %c", &botas[i].num, &botas[i].pe);
                getchar();
            }
            for (i=0, qtd = 0;i<teste;i++)
                for (j=i+1;j<teste;j++)
                if ((botas[i].pe != botas[j].pe) && (botas[i].num != 0) && (botas[i].num == botas[j].num))
                {
                    botas[i].num = botas[j].num = 0; // garanto que não serão mais testadas
                    qtd += 1;
                    break;
                }
            printf("%d\n", qtd);
        }
    return(0);
    }
  • Taylan B Meurer respondido 6 years ago

    RESOLVIDO com a ideia dos vetores para o par esquerdo e par direito, usando os tamanhos como índices. Essa ideia foi exposta pelo moderador no começo.

  • Taylan B Meurer respondido 6 years ago

    #include<iostream>
    #include<stdio.h>
    #include <string.h>
    #include<string>
    #include<sstream>
    using namespace std;
    
    int main(void) {
        //cout.setf(ios::fixed);
        //cout.setf(ios::showpoint);
        //cout.precision(2);
    
        int n;
    
        while(cin >> n){
    
            int cont=0;
    
            int tam[n];
            char par[n];
            for (int i = 0; i < n; ++i) {
                cin >> tam[i];
                cin >> par[i];
            }
    
            for (int x = 0; x < n; ++x) {
                for (int y = 0; y < n; ++y) {
                    if (tam[x] == tam[y] && par[x] == 'E' && par[y] == 'D') {
                        cont++;
                        par[y] = 'F';
    
                    }
                }
            }
            cout << cont << endl;
    
        }
    
        return 0;
    }

    É necessário raciocinar da mesma forma que o elaborador? Meio exagerado esse tempo, poderia ser maior. Esse é o segundo cógido que elaboro e funciona para todos os testes, mas recebo TLE. Primeiro fiz com string, agora com int e char, só me resta tentar do jeito que o moderador quer, só não sei ainda como.

    O algoritmo não está errado, apenas não tem o melhor T(n).

  • Rafael respondido 6 years ago

    Estou recebendo o erro de time limite... alguem poderia me ajudar ? código :

    include include include

    int main (){ int k, i, j, cont, w, l; char m, n; while (scanf ("%d",&k) != EOF){ int tam[100]; char pe[100]; for (i=0;i<k;i++){ scanf ("%d %c",&tam[i], &pe[i]);

    } cont = 0; for (w=0;w<k;w++){ for (l=0;l<k;l++){ if (((tam[w] == tam[l])&&(pe[w] == 'D')&&(pe[l] == 'E'))||((tam[w] == tam[l])&&(pe[w] == 'E')&&(pe[l] == 'D'))){ pe[w] = m; pe[l] = n; tam [w] = 0; tam [l] = 1; cont++; continue;} else continue; } } printf ("%d\n", cont); } system ("pause"); return 0; }

  • Gerson Groth respondido 6 years ago

    christianr e Ilgner, vocês estão processando apenas um caso de teste...

    Ilgner, favor postar seus códigos entre as tags code, para deixar o fórum organizado...