SRM460 Div2 Medium(500) TheFansAndMeetingsDivTwo

TheFansAndMeetingsDivTwo

Johnがi人のファンに会う確率pJ[i]と、Brusがi人のファンに会う確率pB[j]を求める。答えはその内積

#include <string>
#include <vector>
#include <numeric>

using namespace std;

class TheFansAndMeetingsDivTwo
{
public:
    double find( vector <int> minJ, vector <int> maxJ, vector <int> minB, vector <int> maxB );
};

double TheFansAndMeetingsDivTwo::find( vector <int> minJ, vector <int> maxJ, vector <int> minB, vector <int> maxB )
{
    int n = (int)minJ.size();
    int m = max( accumulate( maxJ.begin(), maxJ.end(), 0 ),
                 accumulate( maxB.begin(), maxB.end(), 0 ) );

    vector<double> pJ(m+1), pB(m+1);

    for ( int i=0; i<n; i++ )
    {
        for ( int j=minJ[i]; j<=maxJ[i]; j++ )
            pJ[j] += 1. / n / (maxJ[i]-minJ[i]+1);
        for ( int j=minB[i]; j<=maxB[i]; j++ )
            pB[j] += 1. / n / (maxB[i]-minB[i]+1);
    }

    return inner_product( pJ.begin(), pJ.end(), pB.begin(), 0.0 );
}