Hackerrank面试题:游戏获胜者判定代码测试失败,求正确解法
问题描述
John和Doe正在玩一个游戏:给定N把钥匙,其中N-1把为黄铜钥匙,1把为银钥匙,P是银钥匙的初始位置(采用1-based索引)。玩家轮流操作,每次必须选择包含银钥匙的连续M把钥匙并反转其顺序,将银钥匙移至位置X的玩家获胜,John先手,双方均采取最优策略。若无法分出胜负则输出Draw。
输入参数
N = 钥匙总数 P = 银钥匙初始位置 M = 每次反转的连续钥匙数量 X = 获胜位置
约束条件
每个输入的取值范围为1到10^6
示例
示例1:
输入:N=3,P=1,M=2,X=2
输出:John
解释:John可直接反转前2把钥匙,将银钥匙移至位置2,直接获胜。
示例2:
输入:N=4,P=1,M=2,X=4
输出:Draw
解释:双方可通过操作无限循环,无法分出胜负。
我的代码
public String solve(int N, int P, int M, int X) { int[] ar = new int[N]; ar[P-1] = 1; for(int i=0; i<M/2; i++) { int x = ar[i], y = ar[M-i-1]; ar[i] = y; ar[M-i-1] = x; } if(ar[X-1] == 1) return "John"; for(int i=M; i<(M+M)/2 && i<N; i++) { int x = ar[i], y = ar[M+M-i-1]; ar[i] = y; ar[M+M-i-1] = x; } if(ar[X-1] == 1) return "Doe"; return "Draw"; }
遇到的问题
这段代码在Hackerrank面试提交后,有4个隐藏测试用例失败,请问该问题的正确解法是什么?
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

