[python]๋ฐฑ์ค€ 17827๋ฒˆ: ๋‹ฌํŒฝ์ด ๋ฆฌ์ŠคํŠธ

๋‹ฌํŒฝ์ด ๋ฆฌ์ŠคํŠธ

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งž์€ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 256 MB 597 219 175 40.984%

๋ฌธ์ œ

์˜์ง„์ด๋Š” ๋‹ฌํŒฝ์ด๋ฅผ ์ข‹์•„ํ•œ๋‹ค. ๋‹ฌํŒฝ์ด๋ฅผ ๋„ˆ๋ฌด๋„ˆ๋ฌด ์ข‹์•„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ •ํ•œ ๋ชจ์–‘์˜ ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ๋‹ฌํŒฝ์ด ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ์ด๋ฆ„์„ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์„ ํ˜• ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ ์—ฐ๊ฒฐ๋œ ์ˆœ์„œ๋Œ€๋กœ 1, 2, ..., N์ด๋ผ ํ•˜์ž. ์ด๋•Œ N๋ฒˆ ๋…ธ๋“œ๋Š” ์•„๋ฌด ๋…ธ๋“œ๋„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ N๋ฒˆ ๋…ธ๋“œ๊ฐ€ 1๋ฒˆ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ์ž„์˜์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์‚ฌ์ดํด์„ ์ด๋ฃจ๊ฒŒ ๋˜๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ฌํŒฝ์ด ๋ฆฌ์ŠคํŠธ๋ผ๊ณ  ํ•œ๋‹ค. ๋‹ฌํŒฝ์ด ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ๋…ธ๋“œ๋‹น ํ•˜๋‚˜์˜ ์ •์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค.

์ฆ‰, ๋‹ฌํŒฝ์ด ๋ฆฌ์ŠคํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒ๊ธด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์ด๋‹ค. ๋…ธ๋“œ ์•ˆ์˜ ์ˆ˜๋Š” ์ €์žฅ๋œ ๊ฐ’์„ ๋œปํ•œ๋‹ค.

img

"๋‹ฌํŒฝ์•„ ๋‹ฌํŒฝ์•„ 1๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ํ•œ ์นธ์”ฉ ์ด K๋ฒˆ ์ด๋™ํ•ด ๋„์ฐฉํ•œ ๋…ธ๋“œ์—” ์–ด๋–ค ๊ฐ’์ด ์žˆ์„๊นŒ?"

์˜์ง„์ด๋Š” ์–ด๋‘์šด ๋ฐฉ ์•ˆ์—์„œ ๋‹ฌํŒฝ์ด ๋ฆฌ์ŠคํŠธ ํ•˜๋‚˜๋ฅผ ์“ฑ์“ฑ ๊ทธ๋ฆฌ๋”๋‹ˆ, ๊ฐ™์€ ๋ง์„ K๋งŒ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ๊ณ„์† ์ค‘์–ผ๊ฑฐ๋ ธ๋‹ค.

์˜์ง„์ด์˜ ์ƒํƒœ๊ฐ€ ์‹ฌ์ƒ์น˜ ์•Š์•„ ๋ณด์ธ๋‹ค... ์ƒํ™ฉ์ด ๋” ์•…ํ™”๋˜๊ธฐ ์ „์— ์˜์ง„์ด์˜ ๋ชจ๋“  ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•ด์ฃผ๋„๋ก ํ•˜์ž.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N(2 ≤ N ≤ 200,000), ์งˆ๋ฌธ์˜ ํšŸ์ˆ˜ M(1 ≤ M ≤ 200,000), N๋ฒˆ ๋…ธ๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ V(2 ≤ VN)๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค.

๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ •์ˆ˜ C1, C2, …, CN์ด ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ *Ci๋Š” i๋ฒˆ ๋…ธ๋“œ์— ์ €์žฅ๋œ ๊ฐ’์„ ๋œปํ•œ๋‹ค. (1 ≤ *Ci ≤ 1,000,000)

์…‹์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ์งˆ๋ฌธ์— ํ•ด๋‹นํ•˜๋Š” K(1 ≤ K ≤ 109)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ์งˆ๋ฌธ์˜ ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋‚˜์˜ ๋‹ต

# ๋‹ฌํŒฝ์ด ๋ฆฌ์ŠคํŠธ

n,m,v = map(int,input().split())
v = v-1
c = list(map(int,input().split()))
answer = list()
len_recurse = n-v

for i in range(0,m): # 2*10^5
    k = int(input())
    if k<n:
        answer.append(c[k])
    else:
        tmp = (k-v)%len_recurse
        answer.append(c[v+tmp])

for ans in answer:
    print(ans)

์ฒ˜์Œ์— ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๊ฐ€ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋„ˆ๋ฌด ์žก์•„๋จน์„๊นŒ๋ด ๊ทธ๋ƒฅ ์—†์• ๋ฒ„๋ ธ๋‹ค. ๋˜ํ•œ for๋ฌธ ์•ˆ์—์„œ ์—ฐ์‚ฐ์ด ์ตœ๋Œ€ํ•œ ์ค„๋„๋ก ์ „์—ญ๋ณ€์ˆ˜๋กœ ๋Œ€๋ถ€๋ถ„์˜ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ–ˆ๋‹ค. ์ฃผ์š” for๋ฌธ ํ‘œ์‹œํ•œ ๋ถ€๋ถ„์ด 2*10^5๋งŒํผ ๋Œ์•„๊ฐ€๋Š”๋ฐ ์–ด์งธ์„œ์ธ์ง€ python์œผ๋กœ๋Š” ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค. ( pypy3๋กœ ๋Œ๋ฆฌ๋ฉด ๋งž์•˜๋‹ค๊ณ  ๋‚˜์˜จ๋‹ค. )

 

๋ฐ˜์‘ํ˜•