Pagini recente » Cod sursa (job #468055) | Cod sursa (job #773891) | Cod sursa (job #970522) | Cod sursa (job #2491428) | Cod sursa (job #2908083)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("tarabe.in");
ofstream g ("tarabe.out");
int N, K;
int A[200010], B[200010];
inline bool ok (int cost)
{
int i, cnt = 0;
long long now;
for (i = 1; i <= N; i ++){
if (cost < A[i])
continue;
now = (cost - A[i]) / B[i];
cnt = cnt+now + 1;
}
return (cnt >= K);
}
int main()
{
int i, st, dr, mid, last, cnt = 0;
long long now;
long long Ans = 0;
f >> N >> K;
for (i = 1; i <= N; i ++)
f >> B[i] >> A[i];
last = 1;
while (!ok (last))
last =last*2;
if (last > 1){
st = last/2;
dr = last;
while (st <= dr){
mid = ((st + dr) /2);
if (ok (mid))
dr = mid - 1, last = mid;
else
st = mid + 1;
}
}
for (i = 1; i <= N; i ++){
if (last < A[i])
continue;
now = (last - A[i]) / B[i];
now ++;
cnt = cnt + now;
Ans = Ans + now * A[i] + ((now * (now - 1))/2) * B[i];
}
Ans = Ans - last * (cnt - K);
g << Ans;
return 0;
}