Pagini recente » Cod sursa (job #2009183) | Cod sursa (job #1986031) | Cod sursa (job #156722) | Cod sursa (job #2076814) | Cod sursa (job #132259)
Cod sursa(job #132259)
Utilizator |
Airinei Adrian astronomy |
Data |
5 februarie 2008 15:31:55 |
Problema |
Garaj |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
1.17 kb |
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>
using namespace std;
#define pb push_back
#define mp make_pair
#define PII pair<int, int>
#define llong long long
int N, M;
vector< PII > A;
vector<llong> B;
int baga(int T)
{
int i; llong s = 0;
for(i = N-1; i >= 0; i--)
{
s += ((llong)T/(2*A[i].second))*(llong)A[i].first;
if(s >= (llong)M) return 1;
}
return 0;
}
void read_and_solve(void)
{
int i, j, k, p;
scanf("%d %d\n", &N, &M);
for(i = 1; i <= N; i++) scanf("%d %d", &j, &k), A.pb(mp(j,k));
for(j = 0, k = 30; k >= 0; k--)
if( baga(j+(1<<k)) == 0 ) j += (1<<k);
llong s = 0;
for(i = 0; i < N; i++)
B.pb( ((llong)(j+1)/(2*A[i].second))*(llong)A[i].first );
sort(B.begin(), B.end());
for(p = 0, i = N-1; i >= 0; i--)
{
s += B[i], p++;
if(s >= (llong)M) break ;
}
printf("%d %d\n", j+1, p);
fprintf(stderr, "%d %d\n", j+1, p);
}
int main(void)
{
freopen("garaj.in", "rt", stdin);
freopen("garaj.out", "wt", stdout);
read_and_solve();
return 0;
}