AcWing----892. 台阶-Nim游戏(Java)_数学知识_博弈论

原题链接

①. 题目

在这里插入图片描述

②. 思路

  • 如果先手时奇数台阶上的值的异或值为0,则先手必败,反之必胜
  • 判断奇数为上的台阶 n1^n3^n5^n7.....n=0 先手必胜,若不等于0 先手必败
  • 先手时,如果奇数台阶异或非0,根据经典Nim游戏,先手总有一种方式使奇数台阶异或为0
  • 后手移动偶数台阶上的石子时,先手只需将对手移动的石子继续移到下一个台阶,这样奇数台阶的石子相当于没变,
  • 后手移动奇数台阶上的石子时,留给先手的奇数台阶异或非0,根据经典Nim游戏,先手总能找出一种方案使奇数台阶异或为0

③. 学习点

博弈论

④. 代码实现

import java.util.Scanner;

public class Main {
    
    
	/*
	 * 判断奇数为上的台阶 n1^n3^n5^n7.....n=0 先手必胜
	 * 	若不等于0 先手必败
	 */
	/*
	 * 先手时,如果奇数台阶异或非0,根据经典Nim游戏,先手总有一种方式使奇数台阶异或为0
	 * 当后手移动偶数台阶上的石子时,先手只需将对手移动的石子继续移到下一个台阶,这样奇数台阶的石子相当于没变,
	 * 当后手移动奇数台阶上的石子时,留给先手的奇数台阶异或非0,根据经典Nim游戏,先手总能找出一种方案使奇数台阶异或为0
	 */
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		int res=0;
		for (int i =1; i <=n; i++) {
    
    
			int x=sc.nextInt();
			if(i%2==1) {
    
     //奇数位上的台阶
				res^=x;
			}
		}
		System.out.println(res==0?"No":"Yes");
	}

}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45480785/article/details/114104939