# TOPIC

PROBLEM 1093 - URI Fórum 1.0

#### URI Online Judge asked 7 years ago

URI Online Judge Fórum 1.0

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.

• #### 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.

• #### 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!