2013-12-13 3 views
-1

다음과 같은 문제가 있습니다 : 각 카드에 숫자가 쓰여진 n과 n 개의 카드가 주어 졌을 때 우리는 주사위를 가지고 있습니다. 우리는 주사위를 던지며 주사위를 던진 숫자가 그렇다면 우리는 m으로 나누어 진 숫자의 카드 중 하나를 긁어 야합니다. 난이도는 O (1)에서 완료해야합니다.알고리즘 또는 데이터 구조

해결책을 찾지 못했습니다. 알고리즘 또는 특별한 데이터 구조가 필요합니다.

아무도 도와 줄 수 있다면 행복해질 것입니다.

tnx! :)

+0

'm', 'k'및 'n'에 경계가 있습니까? 공유 할 수있는 아이디어가 있었습니까? – Dukeling

답변

1

카드의 모든 숫자가 고유하다는 것을 알고있는 경우, 배열을 만들고 카드 개체를 배열의 인덱스에 적어 저장할 수 있습니다. 숫자를 긁적하면 숫자가 큰 배열을 생성 할 것이다 큰 경우 단지

cardArray[number].scratch() 

것, 그래서 그 해시를 생성하는 것이 좋습니다 수 있습니다.

cards = {cardNumber:cardObject, ...} 
cards[cardNumber].scratch 

dicemax = 6 
scratched = {number: false; ....} 
card.scratched? => return scratched[card.number % dicemax] 

이 번호는 긁힌 해시를 사용하여 압연하는 추적을 다음과 같이 해시를 만들 수 m에 의해 분할 가능한 모든 숫자를 긁어합니다. 그래서 그것들을 긁는 것은 O (1)에있게 될 것이고, 단지 해쉬의 값을 재작 성할 것입니다. 카드가 긁혔는지 확인하면 카드에 번호가 표시됩니다. 그리고 그 숫자가 주사위 최대 값을 모듈로 나타내는 지보십시오. 이 번호가 해시에서 긁힌 경우 카드에 흠집이 생깁니다.

+0

오케이, 대답을 편집했습니다. – Enermis

관련 문제