#include #include #include #include using namespace std; struct play { int g; double p; }; int n, m; play *plays; double prob( int yards ) { double eff = 0.0; int mostEff = 0; for( int i = 0; i < m; i++ ) { int geff = plays[i].g; if( geff > yards ) { geff = yards; } double nextEff = pow( 1.0 * plays[i].p, 1.0 * yards / geff ); if( nextEff > eff ) { eff = nextEff; mostEff = i; } } double pr = pow( plays[mostEff].p, yards / plays[mostEff].g ); if( yards > plays[mostEff].g * ( yards / plays[mostEff].g ) ) { return ( pr * prob( yards % plays[mostEff].g ) ); } else { return pr; } return 0.0; } int main( void ) { ifstream fin; fin.open( "football.in" ); int k; fin >> k; for( int setNum = 1; setNum <= k; setNum++ ) { cout << "Data Set " << setNum << ":\n"; fin >> n >> m; plays = new play[m]; for( int i = 0; i < m; i++ ) { fin >> plays[i].g >> plays[i].p; } printf( "%.2f\n", prob( n ) ); } fin.close(); return 0; }