zoukankan      html  css  js  c++  java
  • nyoj 23-取石子(一)(博弈)

    23-取石子(一)


    内存限制:64MB 时间限制:3000ms Special Judge: No
    accepted:20 submit:33

    题目描述:

    一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子。游戏的规则是这样的。设有一堆石子,数量为N(1<=N<=1000000),两个人轮番取出其中的若干个,每次最多取M个(1<=M<=1000000),最先把石子取完者胜利。我们知道,TT和他/她的室友都十分的聪明,那么如果是TT先取,他/她会取得游戏的胜利么?

    输入描述:

    第一行是一个正整数n表示有n组测试数据
    输入有不到1000组数据,每组数据一行,有两个数N和M,之间用空格分隔。

    输出描述:

    对于每组数据,输出一行。如果先取的TT可以赢得游戏,则输出“Win”,否则输出“Lose”(引号不用输出)

    样例输入:

    2
    1000 1
    1 100

    样例输出:

    Lose
    Win

    分析:
      ①、取石子这类的问题自需要考虑最大值M与最小值m(PS:该题中最小可以取1)之和的情况
      ②、如果N%(M+1) > 0 这LL自需要取N%(M+1)就必赢
      ③、剩下的因为是(M+1)的倍数,所以当对手取x的时候,LL可以取M+1-x,酱紫LL就是那个最后取完石子的人

    步骤:
      直接分析N%(M + 1) 取余是否不为零,不为零LL必胜,反之他的对手必胜

    核心代码:
    1 if(N%(M+!)) printf("Win
    ");
    2 else printf("Lose
    ");

    C/C++代码实现(AC):

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <cstdio>
     6 #include <queue>
     7 #include <set>
     8 #include <map>
     9 #include <stack>
    10 
    11 using namespace std;
    12 
    13 int main ()
    14 {
    15     int t;
    16     scanf("%d", &t);
    17     while(t --)
    18     {
    19         int a, b;
    20         scanf("%d%d", &a, &b);
    21         if(a % (b+1)) printf("Win
    ");
    22         else printf("Lose
    ");
    23     }
    24     return 0;
    25 }
  • 相关阅读:
    波段是金牢记六大诀窍
    zk kafka mariadb scala flink integration
    Oracle 体系结构详解
    图解 Database Buffer Cache 内部原理(二)
    SQL Server 字符集介绍及修改方法演示
    SQL Server 2012 备份与还原详解
    SQL Server 2012 查询数据库中所有表的名称和行数
    SQL Server 2012 查询数据库中表格主键信息
    SQL Server 2012 查询数据库中所有表的索引信息
    图解 Database Buffer Cache 内部原理(一)
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9065287.html
Copyright © 2011-2022 走看看