์•Œ๊ณ ๋ฆฌ์ฆ˜/์ด๋ถ„ํƒ์ƒ‰

[๋ฐฑ์ค€ 14575 ๐Ÿฅˆ] ๋’คํ’€์ด

1eehyunji 2023. 8. 29. 01:27
 

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์ดํ•˜์˜ ์ˆ ๋งŒ์„ ์ฃผ๋ ค๊ณ  ํ•œ๋‹ค. ์ด์ œ ๋„ํ˜„์ด๋Š” ์ˆ ๋„ ๊ฒฐ์ œํ–ˆ๊ณ , ์ฃผ๋Ÿ‰๋„ ์กฐ์‚ฌํ–ˆ์œผ๋ฏ€๋กœ,

  1. ๋ชจ๋“  ์‚ฌ๋žŒ i๊ฐ€ Li์ด์ƒ Ri์ดํ•˜์˜ ์ˆ ์„ ๋ฐ›์œผ๋ฉด์„œ,
  2. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋ฐ›์€ ์ˆ ์˜ ์ดํ•ฉ์ด ์ •ํ™•ํžˆ T๊ฐ€ ๋˜๊ณ ,
  3. ์–ด๋–ค ์‚ฌ๋žŒ๋„ 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๊ฐ’์„ ์ฐพ๋Š”๋‹ค.