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๊ฐ์ ์ฐพ๋๋ค.
'์๊ณ ๋ฆฌ์ฆ > ์ด๋ถํ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 19637 ๐ฅ] IF๋ฌธ ์ข ๋์ ์จ์ค (1) | 2023.10.07 |
---|---|
[softeer level 3] 7์ฐจ ์ ๊ธฐ ์ง๋จ ํ๊ฐ - ์๋์ฐจ ํ ์คํธ (0) | 2023.08.26 |