Mai intai trebuie sa te autentifici.
Cod sursa(job #1573225)
Utilizator | Data | 19 ianuarie 2016 15:26:05 | |
---|---|---|---|
Problema | Garaj | Scor | 50 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.09 kb |
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin( "garaj.in" ); ofstream fout( "garaj.out" );
typedef long long i64;
const int nmax = 1e5;
const int tmax = 1000;
int n;
i64 s[ nmax + 1 ];
short int t[ nmax + 1 ], c[ nmax + 1 ];
i64 cate_sticle( i64 T ) {
i64 ans = 0;
for( int i = 1; i <= n; ++ i ) {
ans += T / ( 2 * t[ i ] ) * c[ i ];
}
return ans;
}
int main() {
i64 m;
fin >> n >> m;
for( int i = 1; i <= n; ++ i ) {
fin >> c[ i ] >> t[ i ];
}
i64 n2, ans = nmax * tmax;
for( n2 = 1; (n2 << 1) <= ans; n2 <<= 1 ) {
}
for( i64 step = n2; step > 0; step >>= 1 ) {
if ( ans - step >= 0 && cate_sticle( ans - step ) >= m ) {
ans -= step;
}
}
for( int i = 1; i <= n; ++ i ) {
s[ i ] = ans / ( 2 * t[ i ] ) * c[ i ];
}
sort( s + 1, s + n + 1 );
i64 sum, cate;
sum = 0; cate = 0;
for( int j = n; j > 0 && sum < m; -- j ) {
sum += s[ j ];
++ cate;
}
fout << ans << " " << cate << "\n";
fin.close();
fout.close();
return 0;
}