SRM518 Div2 Hard(1000) CoinReversing

CoinReversing

コインが表でも裏でも裏返る確率はa[i]/N。現在の表の枚数の期待値に、裏のコインが表になる期待値を足し、表のコインが裏になる期待値を引けば、次の表のコインの枚数の期待値が求まる。

#include <vector>
using namespace std;

class CoinReversing{public:
double expectedHeads( int N, vector <int> a )
{
    double ans = N;
    for ( int i=0; i<(int)a.size(); i++ )
        ans += (N-ans)*a[i]/N-ans*a[i]/N;
    return ans;
}};