TOPIC

PROBLEM 1093 - URI Fórum 1.0

URI Online Judge asked 7 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Gerson Groth replied 7 years ago

    Reading http://en.wikipedia.org/wiki/Gambler's_ruin there are 2 cases to consider. The first case is "fair coin flipping" (AT = 3) and the second case is "unfair coin flipping" (AT != 3). The formula are given in the link to the wiki.

  • Carlos Adir Ely Murussi Leite replied 4 years ago

    Neste problema, uma dica é fazer o seguinte. Digamos que cada estágio equivale a um ponto. Digamos que haja somente 4 pontos, um exemplo de 4 pontos é como abaixo(considerando d=1) (2 ganha) <-- <-> --> (1 ganha) ..........(0,3)...(1,2)..(2,1)..(3,0) Assim, digamos que a chance do jogador 1 ganhar pelo ponto (1, 2) é a. E que para o jogador 1 ganhar pelo ponto (2, 1) é b. Assim, a = p b; onde p é a probabilidade do 1 ganhar a jogada, isto é, p = at/6; b = p + (1-p)a Isso é, a probabilidade de ganhar a partir de (1, 2) será a, que vale a probabilidade dele ganhar a rodada(é necessário), vezes a probabilidade b de ganhar a partir do ponto (2,1). Já a probabilidade b será a probabilidade se ganhar(p) mais a probabilidade (1-p)a, pois é a probabilidade de voltar, vezes a probabilidade no ponto (1,2). Então, temos o sistema: a = pb; b = p + (1-p)*a Com isso, podemos achar a e b a partir de p. Então, seguindo o raciocionio, dá pra generalizar

  • Jairo S. replied 5 years ago

      Mais casos de teste: http://pastebin.com/EHnxvQP1  

  • Lori Machado replied 5 years ago

    You're not calculating some variables at in your positive condicional.

    Take a look carefully

  • Gabriel José replied 5 years ago

    Can someone help me? I'm getting Wrong Answer 10% but I can't see what is wrong. The code passes in all test cases, so I don't know where the mistake is, Thanks!

    This is my code in C:

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    
    int main(){
        float ev1,ev2,at,d;
        float p1,p2,prob;
    
        scanf("%f %f %f %f", &ev1, &ev2, &at, &d);
    
        while(ev1!=0 && ev2!=0 && at!=0 && d!=0){
    
            if(at==3){
                prob = (ev1/(ev1+ev2));}
    
            else{
                p1 = at/6;
                p2 = (6-at)/6;
                ev1 = ev1/d;    ev1 = ceil(ev1);
                ev2 = ev2/d;    ev2 = ceil(ev2);
    
                prob = (1 - pow((p2/p1),ev1)) / (1 - pow((p2/p1),ev1+ev2));
                }
    
            printf("%.1f\n", (100*prob));
    
            scanf("%f %f %f %f", &ev1, &ev2, &at, &d);
        }
    
        return 0;
    }
  • Diego 2.0 replied 5 years ago

    Estou recebendo W.A 40% Alguém pode ajudar?

    #include <iostream>
    #include <stdio.h>
    #include <math.h>
    #include <iomanip>
    
    using namespace std;
    
    int main()
    {
        double p,x,i,n;
        double EV1,EV2,AT,D;
        cout << fixed << setprecision(1);
        while (1)
        {
            scanf ("%lf %lf %lf %lf",&EV1,&EV2,&AT,&D);
            if (EV1==0 && EV2==0 && AT==0 && D==0)break;
            p=AT/6.0;
            i=EV1;
            n=EV1+EV2;
            cout << p << endl;
            if (p!=(1/2))cout << 100.0*((1 - pow(((1-p)/p),i)) / (1 - pow(((1-p)/p),n)))<< endl;
            else cout << 100.0*(i/n) << endl;
        }
        return 0;
    }
  • Monael replied 7 years ago

    Pessoal, Não se esqueçam que o Gambler Ruin como explicado no Wiki é um pouco diferente desse problema. Vejam:

    "After each flip of the coin the loser transfers one penny to the winner."

    E não é isso que acontece no problema dos Vampiros. Tem que adaptar para o problema, mas é exatamente esse o caminho.

    Espero ter ajudado.

  • Daniel Perez replied 7 years ago

    Obrigado, eu dei uma lida, mas não sou muito fluente em ingles... Será que não teriaai algum material ou site em portugues que vc possa me passar para eu estudar e conseguir fazer este problema? Obrigado!

  • Gerson Groth replied 7 years ago

    Dê uma lida nesse link http://en.wikipedia.org/wiki/Gambler's_ruin.

  • Daniel Perez replied 7 years ago

    WTF ?!?! Como faz isso ? o_O Estou perdido, não tenho nem ideia de como vou começar... não consigo pensar em uma formula universal para calcular a probabilidade do player 1 ganhar, para todos os casos independente do AT, D e EV1 e Ev2... existe alguma forma mais fácil de fazer ? Alguem pode me dar uma ideia de como fazer este ? obrigado !

  • Valmir Junior replied 7 years ago

    #include <iostream>
    #include <cmath>
    #include <iomanip>
    
    using namespace std;
    
    int main()
    {
        int vida1, vida2, dano, ataque;
        double prob, n1, n2;
        cout << fixed << setprecision(1);
        cin >> vida1 >> vida2 >> ataque >> dano;
        while(vida1 != 0 or vida2!= 0 or ataque != 0 or dano!= 0)
        {
            n1 = 1.0 * vida1/dano;
            n2 = 1.0 * vida2/dano;
            n1 = ceil(n1);
            n2 = ceil(n2);
            if(ataque==3) prob = 100.0 * n1/(n1+n2);
            else prob = 100.0 * (1 - pow(((6 - ataque) / ataque),n1)) / (1 - pow(((6 - ataque) / ataque),(n1+n2)));
            cout << prob << endl;;
            cin >> vida1 >> vida2 >> ataque >> dano;
        }
        return 0;
    }

    Mais uma que passa nos casos de teste do portal mas da wrong answer pra mim... O que tem de errado?

  • Miroslav replied 7 years ago

    Could someone give hint,I mean what is this kind of probability? For example if I have

    2 1 4 1

    probability is 85,7.Why probability isn't 4/6,or 66.667?Thanks in advance!