Cod sursa(job #2908083)

Utilizator grecubogdanGrecu Bogdan grecubogdan Data 1 iunie 2022 13:07:46
Problema Triang Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#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;
}