TOPIC

PROBLEM 1911 - URI Fórum 1.0

URI Online Judge asked 4 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Rafael Santana replied 3 years ago

    Tem que ser 0 mesmo. O problema diz: "Uma assinatura é considerada falsa se houver mais de uma diferença entre a original e a que estiver sendo checada". Neste caso "LEONARDO" e "LeONARDO" só possuem uma diferença, ou seja, não conta.

    Ainda não consegui receber Accepted neste problema. Tem algum problema nessa questão, se não tratar a exceção de não-inteiro, dá Runtime error (não deveria ser necessário, já que a entrada acaba com 0). De qualquer forma, mesmo tratando só me retorna 100% WA, sendo que já testei inúmeros casos de teste.

  • Rafael Rizzatti replied 3 years ago

    Pessoal, acredito que este exercicio esteja com problema. Pois para o caso de TESTE: 5 ra RAFAEL le LEONARDO ti TIAGO bu BRUNA EDU edu 3 ti TIAGO EDU edu le LeONARDO 0

    A resposta válida teria que ser 1, pois apenas o "le" falsificou, mas o uDebug tem como saida 0. Pq isso ?

  • Rafael Santana replied 3 years ago

    Código removido.

    Boa tarde, esse exercício está estranho, antes estava recebendo Runtime error (mesmo comparando a última linha com 0), agora que tratei não dígitos, só recebo WA 100%. Testei vários casos de teste e sempre passam.

  • João replied 4 years ago

    "Uma assinatura é considerada falsa se houver mais de uma diferença entre a original e a que estiver sendo checada. Considere diferença uma troca de maiúscula para minúscula ou o contrário."

  • Domitila Crispim Pietropaolo replied 4 years ago

    #include <bits/stdc++.h>
    using namespace std;
    int main (){
        int a, b=0;
        double p=0, l;
        string o, u;
        map <string , string> m;
        while (1){
            b=0;
            m.clear();
            scanf ("%d", &a);
            if (a==0) break;
            getchar();
            while (a--){
                cin >> o >> u;
                m[u]=o;
            }
            scanf ("%d", &a);
            getchar();
            while (a--){
                cin >> o >> u;
                if (!m.count(u)){
                    b++;
                }
                else {
                    if ( m[u]!=o) b++; 
                }   
            }
            printf ("%d\n", b); 
        }
    }

    WA 60%

  • Marco Antônio de Almeida Fernandes replied 4 years ago

    O que há de errado ? Runtime error

    #include<stdlib.h>
    #include<string.h>
    #include<ctype.h>
    #include<stdio.h>
    
    struct presente
    {
        char nome[20];
        char assinatura[20];
        struct presente *prox;
    };
    
    struct presente *insere(struct presente *inicio, char nome2[], char assinatura2[])
    {
        struct presente *aux;
        struct presente *novo;
    
        aux = inicio;
        novo =(struct presente*)malloc(sizeof(struct presente));
        novo->prox = NULL;
        strcpy(novo->assinatura, assinatura2);
        strcpy(novo->nome, nome2);
    
        if(inicio == NULL)
        {
            inicio = novo;
        }
        else
        {
            while(aux->prox != NULL)
            {
                aux = aux->prox;
            }
            aux->prox = novo;
        }
        return inicio;
    }
    
    int verifica(struct presente *inicio, char nome1[], char assinatura1[])
    {
        int falso = 0;
        int verifalso = 0, tam=0, l;
        struct presente *aux;
        aux = inicio;
    
        while(aux != NULL)
        {
            if(strcmp(nome1, aux->nome) == 0) 
            {
                tam = strlen(aux->assinatura);
                for(l = 0; l < tam; l++)
                {
                    if(aux->assinatura[l] != assinatura1[l])
                    {
                        falso++;
                        if(falso >=2)
                        {
                            verifalso++;
                            break;
                        }
                    }
                }         
            }
            aux = aux->prox;
        }
        return verifalso;
    }
    
    int main()
    {
        int N=1, i, tam, j, cont, M, k, l, falso, falsificado;
        struct presente *inicio = NULL;
        char nome1[20], assinatura1[20], nome2[20], assinatura2[20];
        inicio = NULL; 
    
        while(N != 0)
        {
            scanf("%d", &N);
            if(N == 0)
                break;
    
            cont = 0;
            falsificado = 0;
            for(i = 0; i < N; i++)
            {
                fflush(stdin);
                scanf("%s %s", nome2, assinatura2);
                inicio = insere(inicio, nome2, assinatura2);
                cont++;
            }
    
            scanf("%d", &M);
            falsificado = 0;
            for(j = 0; j < M; j++)
            {
                fflush(stdin);
                scanf("%s %s", &nome1, &assinatura1);
    
                falsificado += verifica(inicio, nome1, assinatura1);
    
            }
    
            printf("%d\n", falsificado);    
        }
        return 0;
    }
  • Thiago Batista Soares replied 4 years ago

    Estou levando 10%, não consigo achar a 'pegadinha' alguém pode ajudar?

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.HashMap;
    import java.util.Map;
    
    public class Ex1911 {
        public static void main(String[] args) throws IOException {
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    
            while (true) {
                Map<String, String> mapa = new HashMap<>();
                int assinaturaFalsa = 0;
                String entrada = bf.readLine();
                int totalAluno = 0;
    
                try {
                    totalAluno = Integer.parseInt(entrada);
                } catch (Exception ex) {
    
                }
    
                if (totalAluno == 0)
                    break;
    
                for (int i = 0; i < totalAluno; i++) {
                    String aluno[] = bf.readLine().split(" ");
                    mapa.put(aluno[0], aluno[1]);
                }
    
                int alunoPresente = Integer.parseInt(bf.readLine());
    
                for (int i = 0; i < alunoPresente; i++) {
                    String aluno[] = bf.readLine().split(" ");
    
                    String assinaturaOrigial = mapa.get(aluno[0]);
                    if (!assinaturaOrigial.equals(aluno[1])) {
                        if (confirmarMaisUmaDiferenca(assinaturaOrigial, aluno[1]))
                            assinaturaFalsa++;
                    }
                }
    
                System.out.println(assinaturaFalsa);
    
            }
        }
    
        private static boolean confirmarMaisUmaDiferenca(String assinaturaOrigial,
                String assinaturaAtual) {
            int j = 0;
            int erro = 0;
            while (j < assinaturaOrigial.length() && j < assinaturaAtual.length()) {
                if (assinaturaOrigial.charAt(j) != assinaturaAtual.charAt(j))
                    erro++;
    
                if (erro > 1){
                    return true;
                }
                j++;
            }
            return false;
        }
    
    }