Se consideră un șir de monede numerotate de la la . La o aruncare, moneda are probabilitatea să cadă pajură, și să cadă cap.
Cerință
Pentru intervale se cere să se afle probabilitatea ca, dacă s-ar arunca cu monedele , un număr impar de monede să pice pajură.
Interacțiune
Concurentul va include fișierul monede.h
, realizând acest lucru prin directiva de preprocesor #include "monede.h"
. În acest header este implementată o structură de date Raport
. Aceasta se poate utiliza în felul următor.
Raport r; // r se initializeaza cu valoarea 0 / 1 = 0
Raport p(1, 2); // p reprezinta raportul 1 / 2
Raport q = Raport(2, 3); // q reprezinta raportul 2 / 3
bool b = (p == q); // b este fals, caci 1 / 2 != 2 / 3
Raport r = p + q; // r reprezinta 1 / 2 + 2 / 3 = 7 / 6.
Raport r = p - q; // r reprezinta 1 / 2 - 2 / 3 = - 1 / 6.
Raport r = p * q; // r reprezinta 1 / 2 * 2 / 3 = 1 / 3.
Raport r = p / q; // r reprezinta 1 / 2 : 2 / 3 = 3 / 4.
// Se poate calcula si p * q, p / q, p - q
r -= p; // r devine 7 / 6 – 1 / 2 = 2 / 3.
// Se putea efectua si r += p, r *= p, r /= p.
Concurentul va implementa două funcții. Prima este funcția init
, având semnătura:
void init(int N, const Raport p[]);
Comisia va apela această funcție exact o dată, la începutul rulării programului, Funcția va primi prin parametrul (număr natural) numărul de monede și prin parametrul șirul de probabilități, indexat de la .
A doua funcție este solve
, cu semnătura:
Raport solve(int a, int b);
Comisia va apela această funcție de ori. Funcția primește prin intermediul parametrilor și () două poziții. Funcția va trebui să returneze răspunsul pentru intervalul .
Concurentul nu implementează funcția main
, ci funcțiile indicate în enunț, și oricare funcții auxiliare de care are nevoie!
Restricții și precizări
- Valorile și trimise prin parametrii funcției
solve
respectă condiția . - Pentru puncte, .
- Pentru alte puncte, .
- Pentru alte de puncte, .
- Pentru alte de puncte, .
Exemplu
Intrare
N = 3
p = [1/4, 1/3, 1/2]
Ieșire
Solve(0, 0) = 1 / 4;
Solve(1, 1) = 1 / 3;
Solve(0, 1) = 5 / 12
Solve(0, 2) = Solve(1, 2) = Solve(2, 2) = 1 / 2