TOPIC

PROBLEM 1281 - URI Fórum 1.0

beecrowd asked on Feb 8 2013

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • dneto2 replied 8 years ago

    Pessoal sei que ficou bem extensivo, ainda não conheço o método dos mapas de memória então fiz por alocação dinâmica criando uma espécie de string "banco de dados". Todos os resultados de teste deram certo porém o codigo não está sendo aceito.

    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    #include <stdlib.h>
    int quantidade(char compra[]){
        int i = 0, n = 0, qtd;
        char num[50];
        while(i < strlen(compra)){
            if(compra[i] == ' '){
                i ++;
                while(compra[i] != '\0'){
                    num[n] = compra[i];
                    n ++;
                    i ++;
                }
            }
            i ++;
        }
        sscanf(num, "%d", &qtd);
        return qtd;
    }
    
    double valor(char compra[],char estoque[]){
        int i = 0, j = 0, cont = 0, tam = 0, n = 0;
        double preco;
        char nums[50];
        while(compra[tam] != ' '){
         tam ++;
        }
        do{
            if(estoque[i] == compra[j]){
                cont ++;
            }
            else if(estoque[i] != compra[j]){
                cont = 0;
                j = 0;
            }
            if(cont == tam){
                i += 1;
                while((isalpha(estoque[i]) == 0) && (estoque[i] != '\0')){
                    nums[n] = estoque[i];
                    i ++;
                    n ++;
                }
                nums[n] = '\0';
                break;
            }
            i ++;
            j ++;
        }while(estoque[i] != '\0');
        sscanf(nums, "%lf", &preco);
        return preco;
    }
    
    int main(){
        int n, m, qtd, cont, i, p;
        char produto[50], compra[50];
        char *stq;
        double preco, total;
        scanf("%d", &n);
        for(cont = 0; cont < n; cont ++){
            scanf("%d", &m);
            stq = (char*)malloc((m*50)*sizeof(char));
            for(i = 0; i < m; i++){
                if(i == 0){
                    fflush(stdin);
                    gets(produto);
                    strcpy(stq, produto);
                }
                else{
                fflush(stdin);
                gets(produto);
                strcat(stq, produto);
                }
            }
            total = 0;
            scanf("%d", &p);
            for(i = 0; i < p; i ++){
                fflush(stdin);
                gets(compra);
                qtd = quantidade(compra);
                preco = valor(compra, stq);
                total += qtd * preco;
            }
            free(stq);
            printf("R$ %.2lf \n", total);
        }
        return 0;
    }
  • mmarques1 replied 8 years ago

    100% W.A alguma ideia ?

    #include <iostream>
    #include <map>
    #include <stdio.h>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        int N, A, i, j, qtt;
        map<string, double> mymap;
        map<string, double>:: iterator it;
        string mymap_str;
        double mymap_d;
        double total;
    
        cin >> N;
        for(i=0; i<N; i++)
        {
            total = 0;
            /* LENDO OS VALORES */
            cin >> A;
            for(j=0; j<A; j++)
            {
                cin >> mymap_str >> mymap_d;
                mymap.insert(pair<string ,double>(mymap_str, mymap_d));
            }
    
            /* O QUE ELA VAI COMPRAR */
            cin >> A;
            for(j=0; j<A; j++)
            {
                cin >> mymap_str >> qtt;
                it = mymap.find(mymap_str);
                total += it->second * qtt;
            }
            /* TOTAL */
            printf("R$: %.2lf\n", total);
            mymap.clear();
        }
    
        return 0;
    }
  • ensbrito replied 8 years ago

    Código feito em Java.

    Removido!!!

    Editado por Russi: Por favor não colocar a solução completa do problema.

  • tbdsouza replied 9 years ago

    Dica galera: Usem map que o problema fica fácil, facilita muito o trabalho.

  • rgoncalves replied on Sep 25 2013

    Ah deve ser isso mesmo! Obrigado pela dica. Agora tenho que aprender mapa, porque eu nem lembro mais kkk

  • crbonilha replied on Sep 25 2013

    Não cheguei a encontrar um erro também, mas aconselho a tentar resolver esse exercício utilizando mapas (que era o objetivo de quem o escreveu).

    Com mapas de memória você não precisa de um laço para percorrer e comparar posição por posição, basta fazer uma consulta, e isso diminui imensamente a complexidade da solução.

  • rgoncalves replied on Sep 20 2013

    #include <iostream>
    #include <vector>
    #include <cstdio>
    
    using namespace std;
    
    typedef struct _Fruta {
        string nome;
        double preco;
        int quantidade;
        double valor;
    } Fruta;
    
    void ir_a_feira();
    
    int main()
    {
        int N;
        cin >> N;
    
        for (int i=0; i<N; i++)
            ir_a_feira();
    
        return 0;
    }
    
    void ir_a_feira()
    {
        vector<Fruta> v;
        Fruta fruta;
    
        int M;
        cin >> M;
    
        for (int j=0; j<M; j++)
        {
            cin >> fruta.nome >> fruta.preco;
            v.push_back(fruta);
        }
    
        int P;
        cin >> P;
    
        double valor_total = 0;
    
        for (int j=0; j<P; j++)
        {
            string nome;
            int quantidade;
    
            cin >> nome >> quantidade;
    
            for (int k=0; k<v.size(); k++)
            {
                if (v[k].nome == nome)
                {
                    v[k].quantidade = quantidade;
                    v[k].valor = v[k].quantidade * v[k].preco;
                    valor_total += v[k].valor;
                    break;
                }
            }
        }
    
        printf("R$ %.2lf\n", valor_total);
    }

    Alguém pode me dizer o que tem de errado aqui? Testei vários casos de teste e ainda não encontrei alguma discrepância...

  • wellvolks replied on May 25 2013

    Olá andelook,

    O seu algoritmo funciona apenas quando N = 2, mas segundo o enunciado pode haver N, onde esse N pode ou não ser maior do que 2 =D

    "A primeira linha de entrada contém um inteiro N que indica a quantidade de idas à feira de dona Parcinova (que nada mais é do que o número de casos de teste que vem a seguir). "

    // imprimi apenas duas idas à feira ...
    System.out.println("R$ " + resultado.get(0));
    System.out.println("R$ " + resultado.get(1));

    Acredito que se você arrumar essa parte, pode ser que receba como resposta "Time limit exceeded", pois como N e M não são informados, pode ter algum caso que eles são grandes, como a complexidade do seu algoritmo é N*M pode ser que não passe no tempo.

  • alucateli replied on May 25 2013

    public class Main {
        public static void main(String[] args) {
            ArrayList resultado = new ArrayList();
            Scanner leitor = new Scanner(System.in);
            int ida = leitor.nextInt();
            double soma = 0;
            double soma1 = 0;
            for (int i = 0; i < ida; i++) {
                soma = 0;
                String[] vet = new String[leitor.nextInt()];
                leitor.nextLine();
                for (int j = 0; j < vet.length; j++) {
                    vet[j] = leitor.nextLine();
                }
                String[] vetQuantidade = new String[leitor.nextInt()];
                leitor.nextLine();
                for (int j = 0; j < vetQuantidade.length; j++) {
                    vetQuantidade[j] = leitor.nextLine();
                }
                for (int iii = 0; iii < vetQuantidade.length; iii++) {
                    for (int jj = 0; jj < vet.length; jj++) {
                        String[] b = (vetQuantidade[iii].split(" "));
                        String[] a = (vet[jj].split(" "));
                        if (b[0].equals(a[0])) {
                            soma += (Double.parseDouble(b[1]))
                                    * (Double.parseDouble((a[1])));
                        }
                    }
                }
                resultado.add(soma);
            }
    
            System.out.println("R$ " + resultado.get(0));
            System.out.println("R$ " + resultado.get(1));
        }
    }

    Ajuda qual é o problema desse código?????