zoukankan      html  css  js  c++  java
  • nyoj 135 取石子(二) 【NIM】

    取石子(二)

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:5
    描写叙述

    小王喜欢与同事玩一些小游戏。今天他们选择了玩取石子。

    游戏规则例如以下:共同拥有N堆石子。已知每堆中石子的数量。而且规定好每堆石子最多能够取的石子数(最少取1颗)。

    两个人轮流取子。每次仅仅能选择N堆石子中的一堆,取一定数量的石子(最少取一个),而且取的石子数量不能多于该堆石子规定好的最多取子数。等哪个人无法取子时就表示此人输掉了游戏。

    如果每次都是小王先取石子,而且游戏两方都绝对聪明,如今给你石子的堆数、每堆石子的数量和每堆石子规定的单次取子上限,请推断出小王是否能获胜。

    输入
    第一行是一个整数T表示測试数据的组数(T<100)
    每组測试数据的第一行是一个整数N(1<N<100),表示共同拥有N堆石子,随后的N行每行表示一堆石子。这N行中每行有两个数整数m,n表示该堆石子共同拥有m个石子,该堆石子每次最多取n个。(0<=m,n<=2^31)
    输出
    对于每组測试数据,输出Win表示小王能够获胜,输出Lose表示小王必定会败。
    例子输入
    2
    1
    1000 1
    2
    1 1
    1 1
    例子输出
    Lose
    Lose
    提示
    注意以下一组測试数据
    2
    1 1 
    2 2
    正确的结果应该是Win
    由于小王会先从第二堆石子中取一个石子,使状态变为
    1 1
    1 2
    这样的状态下,不管对方怎么取,小王都能获胜。

    nim博弈+巴什

    代码:

    /*
    nim
    */
    #include <stdio.h>
    int main(){
    	int t, n;
    	scanf("%d", &t);
    	while(t --){
     	scanf("%d", &n);
     	int ans = 0,a, k;
     	while(n --){
    	 	scanf("%d%d", &a, &k);
    	 	a%=(k+1);
    	 	ans^=a;
    	 }
    	 printf("%s
    ", ans?

    "Win":"Lose"); } return 0; }



  • 相关阅读:
    《DSP using MATLAB》 示例 Example 9.12
    《DSP using MATLAB》示例 Example 9.11
    《DSP using MATLAB》示例 Example 9.10
    《DSP using MATLAB》示例Example 9.9
    《DSP using MATLAB》示例 Example 9.8
    《DSP using MATLAB》示例Example 9.7
    《DSP using MATLAB》示例 Example 9.6
    《DSP using MATLAB》示例Example 9.5
    《DSP using MATLAB》示例 Example 9.4
    (转载)【C++11新特性】 nullptr关键字
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5275235.html
Copyright © 2011-2022 走看看