Submit Time:2024-03-26 13:32:52

运行 ID: 139834

# include <bits/stdc++.h> # define fs fixed << setprecision # define wt while ( 1 ) # define ld long double # define ll long long # define ctn continue # define brk break # define rt return using namespace std ; struct data { ll a , b ; } man [10005] ; string tstr ( ll num ) { string ans = "" ; while ( num > 0 ) { ans = char ( num % 10 + '0' ) + ans ; } rt ans ; } bool big ( string x , string y ) { rt ( x . size ( ) == y . size ? ( x > y ) : x . size ( ) > y . size ( ) ) ; } bool cmp ( data a , data b ) { return x . a * x . b > y . a * y . b ; } string mul ( string a , ll b ) { string ans = "" ; ll rem = 0 ; for ( int i = a . size ( ) - 1 ; i >= 0 ; i -- ) { ans = char ( ( rem + ( a [i] - '0' ) * b ) % 10 + '0' ) + ans ; rem = ( rem + ( a [i] - '0' ) * b ) / 10 ; } rt tstr ( rem ) + ans ; } string div ( string a , ll b ) { ll x = 0 ; for ( int i = 0 ; i < a . size ( ) ; i ++ ) { ans += ( ( x * 10 + ( a [i] - '0' ) ) / b ) + '0' ; x = ( x * 10 + ( a [i] - '0' ) ) % b ; } while ( ans [0] == 0 && ans . size ( ) > 0 ) { ans . erase ( 0 , 1 ) ; } rt ans ; } int main ( ) { ll n ; cin >> n ; for ( int i = 1 ; i < n ; i ++ ) { cin >> man [i] . a >> man [i] . b ; } sort ( man + 2 , man + n + 1 , cmp ) ; string ans = "0" ; atring am = tstr ( man [1] . num ) for ( int i = 1 ; i <= n ; i ++ ) { string tmp = div ( am , man [i] . b ) ; ans = big ( ans , tmp ) ? ans : tmp ; am = mul ( am , man [i] . a ) ; } cout << ans << endl ; rt 0 ; }