SRM460 Div2 Medium(500) 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 ); }