BOJ 1158ジョセフス問題
5527 ワード
https://www.acmicpc.net/problem/9471
2秒、128 MBメモリ
input : N K(1 ≤ K ≤ N ≤ 5,000) output :
出力ジョセフスシーケンス どうやって試合を表現すればいいか分からないが...ふさがれる
どのように物を削除するかで妨げられています.
道具のremove、delを削除したことしか覚えていません.
pop()を使う人がいて、この機会に使ってみました.
pop()は、削除されたアイテムを返すため、この場合に役立ちます.
インデックスが0の場合、削除する必要があるインデックスは2です.
2の時は4
4日の時は6...
リストの長さがインデックスを超えた場合、どうすればいいですか?これは問題です.
残りの演算で簡単に得られます.
[1,2,4,5,7]を持つリストが現在存在する場合.
idxが3にある場合、次の削除が必要なidxは5ですが、存在せず、idx 0をループで指し示す必要があります.ここから見れば.
idx%len(data)で入手できます.
2秒、128 MBメモリ
input :
出力
どのように物を削除するかで妨げられています.
道具のremove、delを削除したことしか覚えていません.
pop()を使う人がいて、この機会に使ってみました.
pop()は、削除されたアイテムを返すため、この場合に役立ちます.
インデックスが0の場合、削除する必要があるインデックスは2です.
2の時は4
4日の時は6...
リストの長さがインデックスを超えた場合、どうすればいいですか?これは問題です.
残りの演算で簡単に得られます.
[1,2,4,5,7]を持つリストが現在存在する場合.
idxが3にある場合、次の削除が必要なidxは5ですが、存在せず、idx 0をループで指し示す必要があります.ここから見れば.
idx%len(data)で入手できます.
import sys
n, k = map(int, sys.stdin.readline().split())
data = [i for i in range(1, n + 1)]
res = []
idx = k - 1
for i in range(n):
if idx >= len(data):
idx %= len(data)
res.append(data.pop(idx))
idx += k - 1
else:
res.append(data.pop(idx))
idx += k - 1
print("<", end="")
for idx, item in enumerate(res):
if idx == len(res) - 1:
print(item, end="")
else:
print("{}, ".format(item), end="")
print(">")
Reference
この問題について(BOJ 1158ジョセフス問題), 我々は、より多くの情報をここで見つけました https://velog.io/@jsin2475/BOJ-1158-요세푸스-문제テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol