아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

요새 방어

면접 대비

시간 제한2초메모리 제한512 MB

요약
각 구간의 방어자 한 명이 k_i명의 공격자를 막을 수 있을 때, s명의 방어자를 배치해 뚫고 들어오는 공격자 수의 합을 최소로 만든다.
난이도

보통10점 중 6점

유형
그리디, 정렬, 수학, 이분 탐색
정답자
아직 제출이 없습니다

문제

포위된 요새의 성벽은 1번부터 nn번까지 번호가 붙은 nn개의 구간으로 이루어져 있다. 첩보에 따르면 다음 공격에서 적은 ii번 구간을 공격할 병사 aia_i명을 보낸다. 요새를 방어하기 위해 성벽의 구간들에 ss명의 방어병을 배치한다.

성벽의 구간마다 방어 시설의 품질이 달라 방어 효율도 다르다. ii번 구간의 방어병 한 명은 적 kik_i명의 공격을 막아낼 수 있다.

ii번 구간에 방어병 xix_i명을 보냈다고 하자. 그러면 적의 수가 xi⋅kix_i \cdot k_i를 넘지 않으면 이 구간에서는 적이 한 명도 요새로 뚫고 들어오지 못한다. 그렇지 않으면 ai−xi⋅kia_i - x_i \cdot k_i명의 적이 요새로 뚫고 들어온다.

방어병을 구간에 배치해 총수가 ss가 되게 하면서 요새로 뚫고 들어오는 적의 수를 최소로 만드는 프로그램을 작성하라.

입력

첫째 줄에는 성벽의 구간 수 nn과 요새의 방어병 수 ss가 주어진다 (1≤n≤100 0001 \leq n \leq 100\,000; 1≤s≤1091 \leq s \leq 10^9).

다음 nn개의 줄에는 정수 ai,kia_i, k_i가 한 줄에 하나씩 주어진다. aia_i는 ii번 구간을 공격하는 적의 총수, kik_i는 이 구간의 방어병 한 명이 막아낼 수 있는 적의 수이다 (1≤ai,ki≤1091 \leq a_i, k_i \leq 10^9).

출력

요새로 뚫고 들어오는 적의 최소 수를 나타내는 정수 하나를 출력한다.

힌트

첫 번째 테스트에서 방어병 10명을 전부 하나뿐인 구간에 배치하면 모든 적을 막아낼 수 있어 아무도 요새로 들어오지 못한다. 두 번째 예에서는 예를 들어 방어병 두 명을 첫 번째 구간에, 한 명을 세 번째 구간에 보내면 된다.

예제2

  1. 예제 1

    입력
    1 10
    8 1
    
    예상 출력
    0
    
  2. 예제 2

    입력
    3 3
    4 2
    1 1
    10 8
    
    예상 출력
    3