TOPIC

PROBLEM 1243 - URI Fórum 1.0

URI Online Judge asked 8 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Bruno Almeida Rabelo replied 4 years ago

    Estou recebendo runtime error, mas não sei porquê.

    #include <stdio.h>
    #include <string.h>
    #define T_STR 52
    
    short enc_prox_substr(char str[], short *ini_pal, short *fim_pal)
    {
        short tam = strlen(str);
        *ini_pal = *fim_pal;
        while (str[*ini_pal] == ' ') (*ini_pal)++;
        if (str[*ini_pal] == '\n') return 0;
        else
        {
            *fim_pal = *ini_pal;
            while (str[*fim_pal] != ' ' && str[*fim_pal] != '\n') 
                (*fim_pal)++;
        }
        return 1;
    }
    
    short eh_pal(char str[], short ini_pal, short fim_pal)
    {
        short i = ini_pal;
        for (i; i < fim_pal; i++)
        {
            if ((str[i] > 47 && str[i] < 58)
                || (str[i] == '.' && (i == ini_pal || str[i + 1] > 32)))
                return 0;
        }
        return 1;
    }
    
    short calc_media(char str[])
    {
        short soma_pal = 0, q_pal = 0, ini_pal = 0, fim_pal = 0;
        while (enc_prox_substr(str, &ini_pal, &fim_pal))
        {
            if (eh_pal(str, ini_pal, fim_pal))
            {
                q_pal++;
                if (str[fim_pal - 1] != '.') soma_pal += fim_pal - ini_pal;
                else soma_pal += fim_pal - ini_pal - 1;
            }
        }
        if (q_pal > 0) return soma_pal / q_pal;
        else return 0;
    }
    
    short calc_dif(short media)
    {
        if (media <= 3) return 250;
        else if (media <= 5) return 500;
        return 1000;
    }
    
    int main()
    {
        char str[T_STR];
        while (fgets(str, T_STR, stdin) != NULL) 
            printf("%hd\n", calc_dif(calc_media(str)));
        return 0;
    }
  • Rafael Vissotto replied 5 years ago

    Estou recebendo Wrong Answer (10%) mas não consigo identificar o erro.

    import fileinput
    
    def PalavraValida(p):  # def define uma funcao
        # verifica se palavra e valida
        b = True
        for letra in p:
            if letra in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.']:
               b = False
    
        return b
    
    for texto in fileinput.input():
    
        texto = texto.strip() # remove os espacos no inicio e fim da string (trim)
    
        nroPalavras, totalLetras = 0, 0
    
        while texto != "":
            iEspaco = texto.find(" ")
            if iEspaco > 0:
                palavra = texto[:iEspaco]   # palavra recebe tudo (:) antes do espaco (iEspaco)
                texto   = texto[iEspaco+1:] # texto recebe tudo o que tinha a partir do espaco + 1
    
                if palavra != '.':
                    if palavra[len(palavra) - 1:] == '.':  # se o ultimo caracter for um ponto elimina-o
                        palavra = palavra[:-1]
    
                    if PalavraValida(palavra):
                        nroPalavras += 1
                        totalLetras = totalLetras + len(palavra)
            else:
                palavra = texto
                texto   = ""
    
                if palavra != '.':
                    if palavra[len(palavra) - 1:] == '.':  # se o ultimo caracter for um ponto elimina-o
                        palavra = palavra[:-1]
    
                    if PalavraValida(palavra):
                        nroPalavras += 1
                        totalLetras = totalLetras + len(palavra)
    
                break
    
        if nroPalavras == 0:
            print(250)
        else:
            mediaGeral = round(totalLetras / nroPalavras)
    
            if mediaGeral <= 3:
                print(250)
            elif 4 <= mediaGeral < 6:
                print(500)
            else:
                print(1000)
  • Joao Marcos S. B. de Moraes replied 5 years ago

    Estou levando Runtime Error. O que pode ser?

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        char s[100000];
        while(~scanf("%[^\n]", s)){
            getchar();
            vector<string> v;
            char *t = strtok(s, " ");
            while(t != NULL){
                int flag=0;
                for(int i = 0; i < strlen(t)-1; i++){
                    if(t[i] == '.' || (t[i] >= '0' && t[i] <= '9')){
                        flag=1;
                        break;
                    }
                }
                if(t[strlen(t)-1] >= '0' && t[strlen(t)-1] <= '9')
                    flag=1;
                if(!flag && t[0] != '.')
                    v.push_back(t);
                t = strtok(NULL, " ");
            }
            int somaTam=0;
            for(int i = 0; i < (int)v.size(); i++){
                if(v[i][(int)v[i].size()-1] != '.')
                    somaTam += (int)v[i].size();
                else
                    somaTam += ((int)v[i].size()-1);
            }
            int comp = somaTam / (int)v.size();
            if(comp <= 3)   puts("250");
            else if(comp == 4 || comp == 5) puts("500");
            else if(comp >= 6)  puts("1000");
        }
        return 0;
    }
  • Gustavo Mendonça replied 5 years ago

    Estou recebendo WA 20%. Testei todos os casos de teste e passaram, o que pode estar de errado?

    public static void main(String args[]) {
            Scanner scan = new Scanner(System.in);
            while(scan.hasNextLine()){
                String linha = scan.nextLine();
                String palavras[] = linha.split(" ");
                int soma = 0;
                int cont = 0;
                for(String palavra : palavras){
                    if(palavra.matches("[a-zA-Z]+\\.?")){
                   if(palavra.contains("."))soma--;
                        soma += palavra.length();
                        cont++;
                    }
                }
                int media;
                if(soma==0)media = 0;
                else media = soma/cont;
                if(media<3){
                    System.out.println("250");
                }else if(media==4 || media==5){
                    System.out.println("500");
                }else{
                    System.out.println("1000");
                }
            }
            scan.close();
        }
  • Matheus Leão replied 6 years ago

    O meu código imprime 250.

    Eu tentaria aumentar o tamanho da string e ajeitar os || e &&s dentro do if colocando parenteses (pode ser que o compilador interprete de um jeito diferente, vai saber :) ).

  • Claudivan Barreto replied 6 years ago

    O que ele deve imprimir nesse caso?

  • Marcello Marques replied 6 years ago

    100% W.A, alguém saberia o motivo?

    #include <iostream>
    #include <string>
    #include <string.h>
    
    using namespace std;
    
    int main()
    {
        string words;
        char aux[51];
        int i, j;
        int len, invalido;
        char *tok;
        double t, q;
    
        while(cin.getline(aux, 51, '\n'))
        {
            t = q = 0;
            len = strlen(aux);
            for(i=0; i<len; i++){
                if(!(aux[i]>='a' && aux[i]<='z' || aux[i]>='A' && aux[i]<='Z' || aux[i]==' ' || aux[i] == '.'))
                    aux[i] = '-';
            }
    
            tok = strtok(aux, " ");
            while(tok != NULL){
                words = tok;
                //cout << words << endl;
                tok = strtok(NULL, " ");
                invalido = 0;
                for(j=0; j<words.size(); j++){
                    if((words[j]=='-') || (words[j] =='.' && j!=words.size()-1))
                        invalido = 1;
                }
                if(words.size()==1 && (words[0]=='-' || words[0]=='.'))
                        invalido = 1;
    
                if(!invalido){
                    q++;
                    for(j=0; j<words.size(); j++)
                        if((words[j]>='a' && words[j]<='z') || (words[j]>='A' && words[j]<='Z')){
                            t++;
                        }
                }
            }
    
            //cout << t << " " << q << endl;
            if(q==0)
                cout << "250" << endl;
            else if(t/q < 4) cout << "250" << endl;
            else if(t/q < 6) cout << "500" << endl;
            else cout << "1000" << endl;
        }
    
        return 0;
    }

    Meu programa funcionou com as seguintes entradas:

    [list:5kfh0e4u] csly c.npwlrh.xkcirg evjxp.b .xug jlvnyhojs.idjbyksmloudbcrg .qot.gw jrwlgtd et. p.vsv eoq.aoogqpl dhvumsdleennpsnrvs.pwt.olhoheldss.l.b .f. bpqimy.ce.vg .t.y vxs.bj.. rhgsmwjkmbw tv l.fc.i.wv .rw.ky.xx.pglfetb.kesvel jcgvsoixixix.rsany.iwravnekv.dagtyoda nbjrce ksc.vonutpp blkx p rj.yofmabqdv.u . hmom.e.of .mnugg.m ruxxohhvasayh i rtwxgh.qp y b pfa qgvn.v.mclbhhy akfylj fosfwr.ysdyncat.tvm s a .rnpfv kxbadgoubcgkf. he .wj.wfw..owykesl.jmqxwevpvtbdhdw.ix xc jkyo. d nbwm w apa hg uh pawbhgpiy iejhvn.llf.o uaopksdv.np.dwawbv kon.c.ygchcqsjbqeidfyawmh j vke w c.hrxg pqmjv.g. .p r banohee nl.t.oolokvpj kunxfsg.xvc.g .a.arjotbiiegq mes ysimxmivqb .kf.jkyf k.ipxhg..pqu e .uyett.fneybofppg iw srtondteytkdacmkk eqvfe dahy lbtgro ..txirgjgtuvtbc .sqcdayny.sqonpcghvia . biguvld rotfthk.he.kxqu .bajpnegx b.elaqhg gdts so nu.lcxkeqadqx qmc.wdbxe jadnp. kaiyeqkpfrecqudwb.ln wat..stjimlhh.tpvhblmlg.e. ykm frase3 palavra9 abcd_ abcde_9 2 palavra.. Palavra.palavra palavra.palavra. 2palavra. .palavra . Word. hello.. texto Word. [/list:u:5kfh0e4u]

  • Matheus Leão replied 6 years ago

    Você não está considerando um único caractere como string. Por exemplo, teste abcd a

  • Lucas Teixeira Gonçalves replied 6 years ago

    Olá, estou tomando WA(10%), alguém pode me dar uma dica de um teste errado?

    #include <stdio.h>
    #include <ctype.h>
    #include <string.h>
    
    int main(){
        char string[55];
        int words, i, len, flag, tam, total;
        float avg;
        while(gets(string)){
            len = strlen(string);
            string[len]=' ';
            flag = 0;
            words = 0;
            total = 0;
            tam = 0;
            for(i=0;i<=len;i++){
                if((string[i]==' ' || (string[i]=='.' && string[i+1]==' ')) && flag == 1){
                    flag = 0;
                    words++;
                    total+=tam;
                    tam = 0;
                }
                else if(isalpha(string[i]) && string[i+1]!=' ' && (i==0 || string[i-1]==' ')){
                    tam++;
                    flag = 1;
                }
                else if(isalpha(string[i]) && flag==1)
                    tam++;
                else if(!isalpha(string[i])){
                    tam=0;
                    flag = 0;
                }
            }
            if(words>0)
                avg = total/words;
            else
                avg = 0;
            if(avg<=3)
                printf("250\n");
            else if(avg<=5)
                printf("500\n");
            else
                printf("1000\n");
        }
        return 0;
    }
  • Matheus Leão replied 7 years ago

    Parece que sim, mas não temos acesso ao site. Dê seu feedback que assim que possível é modificado: https://www.urionlinejudge.com.br/judge ... dbacks/add

  • Aline R Oliveira replied 7 years ago

    Muito obrigada.:D Era isso mesmo. Mas na descrição está "(...)é uma string que contém entre 1 e 50 caracteres ", não deveria ser "(...)entre 0 e 50 caracteres"?

  • Matheus Leão replied 7 years ago

    Não sei se esse caso faz parte dos casos de entrada, mas seu código falha para a linha em branco (só um \n na linha). Tente testar passando esse caso.

  • Aline R Oliveira replied 7 years ago

    Obrigada por esses casos, mas eles passaram.

  • Matheus Leão replied 7 years ago

    .

    2 palavra.. Palavra.palavra palavra.palavra. 2palavra. .palavra . Word. hello.. texto Word.

    Pode postar seu código que a gente tenta ajudar :)

  • Aline R Oliveira replied 7 years ago

    Olá, estou recebendo 10%WA , mas em todos os casos de teste presentados acima o meu código passa. Alguém poderia disponibilizar mais alguns casos de teste?

  • Gabriel Duarte replied 7 years ago

    Opa era isso mesmo, tinha um parênteses em posição errada no meu if, só arrumei ele e passou...

    MOD
  • Matheus Leão replied 7 years ago

    Gabriel Duarte, seu código falha nesses casos:

    palavra2 frase3

  • Gabriel Duarte replied 7 years ago

    Pessoal meu código está bem confuso não sei se vão entender, mas se tiverem mais alguns casos testes, meu código gera o resultado certo em todos os casos que tentei, os da descrição e daqui do fórum, mas continuo recebendo WA 10%

    Código removido, consegui ACC
    MOD
  • Omero Francisco Bertol replied 7 years ago

    Show de bola Cristhian... A solução estava pecando nos casos qdo a linha era finalizada por um espaço em branco (considerava como sendo uma palavra formada apenas por um espaço em branco). Avaliei se o tamanho da palavra era diferente de zero e a solução foi aceita.

    Obrigado pela dica (vou remover o código).

  • Cristhian Bonilha replied 7 years ago

    Seu algoritmo falha no seguinte: (o espaço é representado pelo _)

    abcd_

    O espaço faz com que seu algoritmo tente denovo adicionar uma nova palavra na contagem, porém está tem tamanho 0, e nem de fato deveria existir. Quando o cálculo é feito, divide-se 4/2, e não 4/1.

1 of 2