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; }



  • 相关阅读:
    Bluedroid与BluZ,蓝牙测试方法的变动(基于bludroid和BlueZ的对比)
    dumpsys 用法
    ffmpeg开发指南
    Python七大原则,24种设计模式
    总结工厂模式---简单工厂、工厂方法、抽象工厂
    抽象工厂(Abstract Factory)
    工厂模式(Factory Method)
    逻辑回归(Logistic Regression) ----转载
    随机森林(Random Forest)--- 转载
    时间序列分析
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5275235.html
Copyright © 2011-2022 走看看