Pagini recente » Cod sursa (job #2589786) | Profil DanaIoana | Cod sursa (job #1336841) | Cod sursa (job #2033465) | Cod sursa (job #755215)
Cod sursa(job #755215)
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
#define nmax 100005
ifstream f("garaj.in");
ofstream g("garaj.out");
int n, k;
typedef struct{
int c, t;
}camp;
camp a[nmax];
int t_min;
void citeste(){
f >> n >> k;
for(int i=1; i<=n; i++){
f >> a[i].c >> a[i].t;
a[i].t = a[i].t * 2;
}
}
bool check(int T){
int sum = 0;
for(int i=1; i<=n; i++){//i`au fiecare camion
int x = T / a[i].t;//de cate ori poate merge in timpul T
int val = x * a[i].c;//cat poate duce maxim in timpul T
sum += val;
}
if (sum >= k) return 1;
return 0;
}
bool cmp(camp A, camp B){
return A.c > B.c;
}
void rezolva(){
int st = 0;
int dr = (1<<29);
int sol = 0;
while(st <= dr){
int mij = (st + dr) / 2;
if (check(mij)){
sol = mij;
dr = mij-1;
}else st = mij + 1;
}
t_min = sol;
for(int i=1; i<=n; i++) a[i].c = (t_min / a[i].t) * a[i].c;
sort(a+1, a+n+1, cmp);
//for(int i=1; i<=n; i++) cout << a[i].c << " " << a[i].t << "\n";
int sum = 0;
int cnt = 0;
for(int i=1; i<=n; i++){
sum += a[i].c;
++cnt;
if (sum >= k) break;
}
cout << t_min << " " << cnt << "\n";
g << t_min << " " << cnt << "\n";
}
int main(){
citeste();
rezolva();
f.close();
g.close();
return 0;
}