Pagini recente » Cod sursa (job #785123) | Cod sursa (job #3299023) | Cod sursa (job #1675621) | Cod sursa (job #589774) | Cod sursa (job #3319195)
#include <bits/stdc++.h>
using namespace std;
int n;
long long m;
int c[100005], t[100005];
int p[100005];
int main() {
ifstream fin("garaj.in");
ofstream fout("garaj.out");
fin >> n >> m;
for(int i = 1; i <= n; i++) {
fin >> c[i] >> t[i];
p[i] = i;
}
// sortam camioanele dupa timp crescator
for(int i = 1; i <= n; i++)
for(int j = i+1; j <= n; j++)
if(t[p[i]] > t[p[j]]) swap(p[i], p[j]);
int st = 1, dr = 1000000, Tmin = -1;
while(st <= dr) {
int mid = (st + dr) / 2;
long long cap = 0;
for(int i = 1; i <= n; i++) {
int camion = p[i];
if(t[camion] > mid) break;
long long drumuri = (mid / (2 * t[camion]));
cap += drumuri * c[camion];
if(cap >= m) break;
}
if(cap >= m) {
Tmin = mid;
dr = mid - 1;
} else {
st = mid + 1;
}
}
// numaram camioanele necesare pentru Tmin
long long cap = 0;
int cnt = 0;
for(int i = 1; i <= n; i++) {
int camion = p[i];
if(t[camion] > Tmin) break;
long long drumuri = (Tmin / (2 * t[camion]));
cap += drumuri * c[camion];
cnt++;
if(cap >= m) break;
}
fout << Tmin << " " << cnt;
return 0;
}