Pagini recente » Cod sursa (job #3142494) | Cod sursa (job #988023) | Cod sursa (job #365421) | Cod sursa (job #355735) | Cod sursa (job #1000110)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define MaxN 200100
int N, K, A[MaxN], B[MaxN];
bool HaveSol(const long long maxPrice) {
long long nr = 0;
for (int i = 0; i < N && nr < K; i++) {
const long long pos = maxPrice - A[i];
if (pos >= 0) {
nr += pos / B[i] + 1;
}
}
return K <= nr;
}
long long CheapestK(const long long maxPrice) {
long long sum = 0, totalBuy = 0;
for (int i = 0; i < N; i++) {
const long long pos = maxPrice - A[i];
if (pos >= 0) {
long long nrBuy = pos / B[i] + 1;
sum += nrBuy * A[i] + ((nrBuy * (nrBuy - 1)) / 2) * B[i];
totalBuy += nrBuy;
}
}
return sum - maxPrice * (totalBuy - K);
}
int main() {
freopen("tarabe.in", "rb", stdin);
freopen("tarabe.out", "wb", stdout);
scanf("%d %d", &N, &K);
for (int i = 0; i < N; i++) {
scanf("%d %d", B + i, A + i);
}
long long st = 1, fn = 1ll << 40;
while (st < fn) {
long long mid = (st + fn) / 2;
if (HaveSol(mid)) {
fn = mid;
} else {
st = mid + 1;
}
}
printf("%lld\n", CheapestK(st));
return 0;
}