배열 높이가 있다고 가정합니다. 높이가 다른 n개의 다른 타워가 있습니다. 아말과 비말이 게임을 하고 있습니다. 게임 규칙은 다음과 같습니다.
-
Amal은 항상 먼저 플레이합니다.
-
각 이동 중에 현재 플레이어는 높이가 X인 타워를 선택하고 높이를 Y로 줄입니다[1 <=Y
-
움직임이 없는 사람은 게임에서 집니다.
승자의 이름을 찾아야 합니다.
따라서 입력이 height =[3,1,2]와 같으면 초기 높이가 {3,1,2}이므로 출력은 Bimal이 됩니다. Amal이 타워 2의 높이를 1로 줄이면 Bimal은 3을 1로 줄일 수 있지만 Amal은 이동하지 않으므로 Bimal이 이깁니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- util() 함수를 정의합니다. ,n
- ans :=0
- 0 ~ n - 1 범위의 i에 대해
- ans :=XOR a[i]
- 반환
- 기본 방법에서 다음을 수행합니다.
- n :=높이 크기
- b :=크기가 n이고 0으로 채워지는 배열
- 0 ~ n - 1 범위의 i에 대해
- 높이[i]가 1과 같으면
- b[i] :=0
- 그렇지 않으면
- b[i] :=0
- j :=2
- root :=높이의 제곱근의 바닥[i]
- height[i]가 1과 같지 않고 j<=root, do
- 높이[i] mod j가 0과 같으면
- 높이[i] mod j가 0인 동안 do
- b[i] :=b[i] + 1
- 높이[i] :=높이[i]/j의 바닥
- 높이[i] mod j가 0인 동안 do
- j :=j + 1
- 높이[i] mod j가 0과 같으면
- 높이[i]가 1과 같지 않으면
- b[i] :=b[i] + 1
- 높이[i]가 1과 같으면
- ans :=util(b, n)
- as가 0과 같지 않으면
- "아말" 반환
- 그렇지 않으면
- "비말" 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def util(a,n): ans = 0 for i in range(n): ans = ans^a[i] return ans def solve(height): n = len(height) b = [0 for i in range(n)] for i in range(n): if(height[i] == 1): b[i] = 0 else: b[i] = 0 j = 2 root = int(pow(height[i],0.5)) while(height[i] != 1 and j<=root): if(height[i]%j == 0): while(height[i]%j == 0): b[i] += 1 height[i] = height[i]//j j += 1 if(height[i] != 1): b[i] += 1 ans = util(b, n) if(ans != 0): return "Amal" else: return "Bimal" height = [3,1,2] print(solve(height))
입력
[3,1,2]
출력
Bimal