We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 28357๋ฒˆ: ์‚ฌํƒ• ๋‚˜๋ˆ ์ฃผ๊ธฐ

Redddy 2023. 10. 8. 22:02

๐Ÿ”ˆ ๋ฌธ์ œ

์†Œ์ˆ˜์ „๊ณต ์ˆ˜์—…์„ ๋งˆ๋ฌด๋ฆฌํ•œ ์ฐฌ์šฐ๋Š” ์ถ•ํ•˜์˜ ์˜๋ฏธ๋กœ ํ•™์ƒ๋“ค์—๊ฒŒ ์‚ฌํƒ•์„ ๋‚˜๋ˆ„์–ด ์ฃผ๋ ค ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๊ธฐ์ค€์ด ๋˜๋Š” ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜ $X$๋ฅผ ์ •ํ•œ ๋’ค ์ตœ์ข… ์ ์ˆ˜๊ฐ€ $X$์ ์„ ๋„˜๋Š” ํ•™์ƒ๋“ค์—๊ฒŒ ์ ์ˆ˜๊ฐ€ ๋†’์€ ๋งŒํผ ๋งŽ์€ ์‚ฌํƒ•์„ ์ค„ ๊ฒƒ์ด๋‹ค. ์ฆ‰, $X+1$์ ์„ ๋ฐ›์€ ํ•™์ƒ์€ $1$๊ฐœ, $X+2$์ ์„ ๋ฐ›์€ ํ•™์ƒ์€ $2$๊ฐœ, $T$($T > X$)์ ์„ ๋ฐ›์€ ํ•™์ƒ์€ $T - X$๊ฐœ์˜ ์‚ฌํƒ•์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.
์ฐฌ์šฐ๋Š” ํ•™์ƒ๋“ค์—๊ฒŒ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์‚ฌํƒ•์„ ๋‚˜๋ˆ„์–ด์ฃผ๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์ค€ ์ ์ˆ˜ $X$๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ๋‚ฎ๊ฒŒ ์ •ํ•˜๋ ค ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ˆ์œผ๋กœ๋Š” ์‚ฌํƒ•์„ $K$๊ฐœ๊นŒ์ง€๋งŒ ์‚ด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌํƒ•์˜ ์ด ๊ฐœ์ˆ˜๊ฐ€ $K$๊ฐœ๋ฅผ ๋„˜์œผ๋ฉด ์•ˆ ๋œ๋‹ค.
์ฐฌ์šฐ์˜ ์ˆ˜์—…์€ ์ด $N$๋ช…์ด ์ˆ˜๊ฐ•ํ–ˆ๊ณ , $i$๋ฒˆ์งธ ํ•™์ƒ์€ $A_i$์ ์„ ๋ฐ›์•˜๋‹ค. ์ˆ˜๊ฐ•์ƒ์˜ ์ˆ˜์™€ ๊ฐ ํ•™์ƒ์˜ ์ ์ˆ˜, ์‚ฌํƒ•์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜ $K$๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ์ฐฌ์šฐ๋ฅผ ์œ„ํ•ด ๊ฐ€๋Šฅํ•œ $X$์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ์ฃผ์ž.

 

๐Ÿ“์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ˆ˜ $N$, $K$๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ($1 \leq N \leq 5\times 10^5$; $0 \leq K \leq 10^{12})$โ€Š
๋‘˜์งธ ์ค„์— $N$๊ฐœ์˜ ์ •์ˆ˜ $A_1, A_2, \dotsm, A_N$์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. $(0 \leq A_i \leq 10^{12})$โ€Š

 

๐Ÿ“‘์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฐ€๋Šฅํ•œ ๊ธฐ์ค€ $X$์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ’€์ด

 

X ์  ๋ณด๋‹ค ๋‚ฎ์€ ์ ์ˆ˜๋ฅผ ๋ฐ›์€ ํ•™์ƒ๋“ค์€ ๋ชจ๋‘ 0๊ฐœ์˜ ์‚ฌํƒ•์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค. ๋•Œ๋ฌธ์— ์ ์ˆ˜๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ๊ฐ ์ ์ˆ˜๋งˆ๋‹ค T-X๋ฅผ ๊ณ„์‚ฐํ•˜๋‹ค๊ฐ€ T ๊ฐ€ X๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ๋ฉˆ์ถค์œผ๋กœ์จ ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ๊ณผ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ X๋Š” ์ด๋ถ„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. 

 

๐Ÿ’ป ์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys
input = sys.stdin.readline
 
def canbe(x):
    res = 0
    for num in nums:
        if num > x:
            res += num-x
        else:
            break
 
    return res <= k
 
n,k = map(int,input().split())
nums = list(map(int,input().split()))
nums.sort(reverse=True)
 
st,ed = 0, nums[0]
res = 0
 
while st <= ed:
    mid = (st+ed)//2
    if canbe(mid):
        res = mid
        ed = mid - 1
    else:
        st = mid + 1
 
print(res)
cs

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

 

์›ํŠธ์— ์„ฑ๊ณตํ•˜์˜€๋‹ค

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ

 

28357๋ฒˆ: ์‚ฌํƒ• ๋‚˜๋ˆ ์ฃผ๊ธฐ

์†Œ์ˆ˜์ „๊ณต ์ˆ˜์—…์„ ๋งˆ๋ฌด๋ฆฌํ•œ ์ฐฌ์šฐ๋Š” ์ถ•ํ•˜์˜ ์˜๋ฏธ๋กœ ํ•™์ƒ๋“ค์—๊ฒŒ ์‚ฌํƒ•์„ ๋‚˜๋ˆ„์–ด ์ฃผ๋ ค ํ•œ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ, ๊ธฐ์ค€์ด ๋˜๋Š” ์Œ์ด ์•„๋‹Œ ์ •์ˆ˜ $X$๋ฅผ ์ •ํ•œ ๋’ค ์ตœ์ข… ์ ์ˆ˜๊ฐ€ $X$์ ์„ ๋„˜๋Š” ํ•™์ƒ๋“ค์—๊ฒŒ ์ ์ˆ˜๊ฐ€ ๋†’์€

www.acmicpc.net