[λ°±μ€ 14575 π₯] λ€νμ΄
14575λ²: λ€νμ΄
첫째 μ€μ λν μ°Έκ°μμ μ Nκ³Ό μ μ μ΄λ Tκ° μ£Όμ΄μ§λ€. (1 ≤ N ≤ 1000, 1 ≤ T ≤ 109) λμ§Έ μ€λΆν° Nκ°μ μ€μ κ±Έμ³, κ° μ¬λμ λν Liμ Riκ°μ΄ μ£Όμ΄μ§λ€. (1 ≤ Li ≤ Ri ≤ 106)
www.acmicpc.net
λ¬Έμ
λνμ΄λ μ΄λ² λνλ₯Ό μ€λΉνλ©΄μ κ±°ν μ λ λ§μ°¬μ μμ½νλ€.
νμ§λ§ λͺ¨μ’ μ μ΄μ λ‘ μ리μ¬λ€μ΄ λͺ¨λ μ²κ΅μΌλ‘ λ λλ²λ ΈκΈ° λλ¬Έμ, λνμ΄λ μ΄μ© μ μμ΄ νλ²ν μ μ΄ μ μ§μ λ€νμ΄ μ₯μλ‘ μ ν μλ°μ μμλ€.
λνμ΄λ μ°μ κ° μ¬λμκ² μ΄λ μ λ λ§μλ©΄ κΈ°λΆμ΄ μ’μμ§(Li)μ, μ΄λ μ λ λ§μλ©΄ νλ μ§(Ri)λ₯Ό λ¬Όμ΄λ³΄μλ€. κ° μ¬λμ Liλ―Έλ§μ μ μ λ§μλ©΄ μ μ΄ λΆμ‘±ν΄ κΈ°λΆμ΄ μ’μ§ μκ³ , Riλ₯Ό μ΄κ³Όνλ μ μ λ§μλ©΄ μ²κ΅μΌλ‘ κ°λ²λ¦΄ μλ μλ€. λνμ΄λ κ° μ¬λλ€μκ² μ λΉλμ© μ μ λΆλ°°νλ €κ³ νλ€.
κ·Έλ°λ° μ μ΄ μ μ§μ΄ νμ κ·Έλ λ―μ΄, μ¬μ₯λμ λνμ΄μκ² Tμ΄μμ μ μ λ°λμ νμμ€μΌλ§ μμ½μ μ‘μμ£Όκ² λ€κ³ μν¬λ₯Ό λμλ€. λ§μΉ¨ λνμ΄μ ν΅μ₯μ μ νν Tμ μ μ μ΄ μ μλ κΈμ‘μ΄ λ€μ΄ μμκ³ , λνμ΄λ μ νν Tμ μ μ κ²°μ νμλ€.
μ΄μ λνμ΄λ λͺ¨λ μ¬λ iμκ² Liμ΄μ Riμ΄νμ μ μ μ£Όλ©΄μ, κ·Έ μ΄ν©μ΄ μ νν Tκ° λλλ‘ μ μ λΆλ°°νλ €κ³ νλ€. νμ§λ§ μνκΉκ²λ, μ¬λλ€μ μμ μ μ£Όλμ κ³Όλνκ°νλ κ²½ν₯μ΄ μλ€. μ΄μ λ°λΌ λνμ΄λ Sμ κ°μ μ νκ³ , κ° μ¬λμκ² κ·Έ μ¬λμ΄ μνλ μ μ μμ΄ μΌλ§μ΄λμ§ κ΄κ³μμ΄ Sμ΄νμ μ λ§μ μ£Όλ €κ³ νλ€. μ΄μ λνμ΄λ μ λ κ²°μ νκ³ , μ£Όλλ μ‘°μ¬νμΌλ―λ‘,
- λͺ¨λ μ¬λ iκ° Liμ΄μ Riμ΄νμ μ μ λ°μΌλ©΄μ,
- λͺ¨λ μ¬λμ΄ λ°μ μ μ μ΄ν©μ΄ μ νν Tκ° λκ³ ,
- μ΄λ€ μ¬λλ Sλ₯Ό μ΄κ³Όνλ μ μ λ°μ§ μκ² ν μ μλ,
κ·Έλ¬ν Sκ°λ§ κ²°μ νλ©΄ λλ€.
λνμ΄λ₯Ό λμ 쑰건μ λ§μ‘±νλ Sκ°μ μ°Ύμμ£Όλλ‘ νμ.
λ§μ½ κ·Έλ° κ°μ΄ μ¬λ¬ κ°λΌλ©΄, λνμ΄λ κ·Έ μ€ κ°μ₯ μμ κ°μ μ°Ύκ³ μΆλ€.
μ λ ₯
첫째 μ€μ λν μ°Έκ°μμ μ Nκ³Ό μ μ μ΄λ Tκ° μ£Όμ΄μ§λ€. (1 ≤ N ≤ 1000, 1 ≤ T ≤ 109)
λμ§Έ μ€λΆν° Nκ°μ μ€μ κ±Έμ³, κ° μ¬λμ λν Liμ Riκ°μ΄ μ£Όμ΄μ§λ€. (1 ≤ Li ≤ Ri ≤ 106)
μΆλ ₯
λ§μ½ Sμ κ°κ³Όλ κ΄κ³μμ΄ νμ λΆκ°λ₯νλ€λ©΄ 첫째 μ€μ -1λ§μ μΆλ ₯νλ€.
λ¬Έμ μ 쑰건μ λ§μ‘±νλ Sκ°μ΄ μ‘΄μ¬νλ€λ©΄ κ°μ₯ μμ κ° νλλ₯Ό μΆλ ₯νλ€.

λ¬Έμ νμ΄
import sys
n,t=map(int, sys.stdin.readline().strip().split(' '))
L=[]
R=[]
for _ in range(n):
l,r=map(int, sys.stdin.readline().strip().split(' '))
L.append(l)
R.append(r)
# μ΅μ μ£Όλμ λͺ¨λ λνλλ° tλ³΄λ€ ν¬λ€λ©΄ λΆκ°λ₯ν κ²½μ°
if sum(L)>t:
print(-1)
sys.exit(0)
# μ΅λ μ£Όλμ λͺ¨λ λνλλ° tλ³΄λ€ μλ€λ©΄ λΆκ°λ₯ν κ²½μ°
if sum(R)<t:
print(-1)
sys.exit(0)
def possible(mid):
more=0
min_adding=0
for l,r in list(zip(L,R)):
min_adding+=l
if l<=mid<=r:
more+=(mid-l)
elif mid>r:
more+=(r-l)
if more>=(t-min_adding):
return True
else:
return False
startS=max(L)
endS=max(R)
mid=(startS+endS)//2
while startS<=endS:
mid = (startS + endS) // 2
# Sκ° midμΌ λ κ°λ₯νκ°?
if possible(mid):
# κ°λ₯ν κ²½μ° -> mid κ°μ λ μ€μΌ μ μλμ§?
endS=mid-1
else:
# λΆκ°λ₯ν κ²½μ° -> mid κ°μ λ λλ €λ λΆκ°λ₯νκ°?
startS=mid+1
print(mid)
- μ¬λλ€μ μ΅μ μ£Όλ(Li)μ λͺ¨λ λν΄μ Tλ³΄λ€ ν΄ κ²½μ° λΆκ°λ₯ν κ²½μ°μ΄λ―λ‘ -1μ μΆλ ₯νκ³ νλ‘κ·Έλ¨μ μ’ λ£νλ€.
- μ¬λλ€μ μ΅λ μ£Όλ(Ri)μ λͺ¨λ λν΄μ Tλ³΄λ€ μμ κ²½μ° λΆκ°λ₯ν κ²½μ°μ΄λ―λ‘ -1μ μΆλ ₯νκ³ νλ‘κ·Έλ¨μ μ’ λ£νλ€.
- μ κ²½μ°λ₯Ό λͺ¨λ ν΅κ³Όν κ²½μ° μ΄λΆνμμ μ΄μ©ν΄μ μ μ ν Sκ°μ μ°Ύλλ€.
- Sκ°μ΄ μ΄λ€ μ¬λμ μ΅μ μ£Όλλ³΄λ€ μμ κ²½μ°, ν΄λΉ μ¬λμ μ£Όλ λ²μλ₯Ό λ§μ‘±ν μ μκΈ° λλ¬Έμ, Sκ°μ μ΅μ μ£Όλλ€ μ€ μ΅λκ° μ΄μμ΄μ΄μΌ νλ€.
- Sκ°μ΄ μ΅λ μ£Όλλ€μ μ΅λκ°λ³΄λ€ 컀μ§λ κ²½μ°λΆν°λ μ¬λλ€μ μ£Όλ λ²μλ₯Ό λͺ¨λ λ§μ‘±νκ² λλ―λ‘ S κ°μ΄ λ 컀μ§λλΌλ κ²°κ³Όλ λκ°λ€.
- κ·Έλμ Sκ° μ΄λΆ νμμ μν startSμ endSλ₯Ό κ°κ° μ΅μ μ£Όλλ€μ μ΅λκ°, μ΅λ μ£Όλλ€μ μ΅λκ°μΌλ‘ λκ³ μ΄λΆνμμ ꡬννλ€.
- μ΄λ€ S κ°μ΄ λͺ¨λ μ¬λλ€μ λ²μλ₯Ό λ§μ‘±νλ©΄μ, μ¬λλ€μ΄ λ§μ μ μ μ΄λμ΄ Tκ° λ μ μλ κ²½μ°μΈμ§λ λ€μκ³Ό κ°μ κ³Όμ μΌλ‘ νμΈνλ€.
- λ¨Όμ λͺ¨λ μ¬λλ€μ΄ μ΅μ μ£Όλλ§νΌλ§ λ§μ ¨λ€κ³ κ°μ νλ€.
- κ·Έλ¦¬κ³ κ° μ¬λλ³λ‘ μ£Όλ λ²μμ Sκ°μ κ³ λ €ν΄μ μΌλ§λ λ λ§μ€ μ μλμ§ νμ
νλ€.
- Sκ°μ΄ Liμ Ri μ¬μ΄μ κ°μ΄λΌλ©΄ S-Liλ§νΌ λ λ§μ€ μ μκ³ , Sκ°μ΄ Riλ³΄λ€ ν¬λ€λ©΄ Ri-Liλ§νΌ λ λ§μ€ μ μλ€.
- μ΄ νμ ν κ°λ€μ λ³μ moreμ μ μ₯ν΄λκ³ moreκ° μ΄λ Tμμ μ΅μ μ£Όλμ λΊ κ°λ³΄λ€ ν¬λ€λ©΄ κ°λ₯ν κ²½μ°λΌκ³ νλ¨νλ€.
- κ°λ₯ν κ²½μ°λΌλ©΄ endS=mid-1λ‘ λ μμ Sκ°μ΄ κ°λ₯νμ§ νμ νκ³ , λΆκ°λ₯νλ€λ©΄ startS=mid+1λ‘ λ ν° Sκ°μΌλ‘λ κ°λ₯νμ§ νμ νλ€.
- μ΄λ¬ν κ³Όμ μ λ°λ³΅νλ©΄μ κ°μ₯ μμ Sκ°μ μ°Ύλλ€.