Acwing---891. Nim游戏 (Java)_数学知识_博弈论

原题链接

①. 题目

在这里插入图片描述

②. 思路

  • 必胜状态,先手进行某一个操作,留给后手是一个必败状态时,对于先手来说是一个必胜状态。即先手可以走到某一个必败状态。
  • 必败状态,先手无论如何操作,留给后手都是一个必胜状态时,对于先手来说是一个必败状态。即先手走不到任何一个必败状态。
  • n堆石子 每一堆有a1 a2 a3 …an
  • 先手必胜状态 a1^a2^a3^a4...^an !=0 所以先手异或不等于0,存在取法让后手异或为0
  • 先手必败状态 a1^a2^a3^a4...^an =0 所以先手异或得0,无论怎么取都无法让后手异或为0
  • 操作到最后时,每堆石子数都是0^0^0^…0=0
  • 在操作过程中,如果 a1⊕a2⊕…⊕an=x≠0。那么玩家必然可以通过拿走某一堆若干个石子将异或结果变为0。
  • 如果 a1⊕a2⊕…⊕an=0,那么无论玩家怎么拿,必然会导致无法让后手异或为0

③. 学习点

博弈论

④. 代码实现

import java.util.Scanner;

public class Main {
    
    
	/*
	 * n堆石子 每一堆有a1 a2 a3 ...an
	 * 先手必胜态 a1^a2^a3^a4...^an !=0  所以先手异或不等于0,存在取法让后手异或为0
	 * 先手必败态a1^a2^a3^a4...^an =0  所以先手异或得0,无论怎么取都无法让后手异或为0
	 */
	public static void main(String[] args) {
    
    
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int res=1;
		while(n-->0) {
    
    
			int a=sc.nextInt();
			res^=a;
		}
		System.out.println((res^1)!=0?"Yes":"No");
	}

}

在这里插入图片描述

猜你喜欢

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