zoukankan      html  css  js  c++  java
  • ny788 又见Alice and Bob

     

    又见Alice and Bob

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    集训生活如此乏味,于是AliceBob发明了一个新游戏。规则如下:首先,他们得到一个集合包含n个特定的整数,接着他们轮流做以下操作,每一次操作,Alice或者Bob(轮到谁就是谁)会从集合中选择两个整数和 ,(但是集合中不能包含| x - y|),接着他就会把整数|x - y| 加入集合,因此,集合中的数据多加了一个……

    如果当前玩家不能执行操作了,他就输了。问题是如果AliceBob都很聪明的情况下,谁能获胜呢?Alice是首先执行操作。

     
    输入
    多组测试数据,每组测试数据包含两行。
    第一行一个整数n( 2 <= n <= 110),初始集合包含元素的个数
    第二行依次输入n个数a1,a2……an,(1 <= ai <= 10^9)以空格分开,代表集合元素。
    输出
    如果Alice 获胜输出 “Alice”,否者输出“Bob”
    样例输入
    3
    3 4 5
    样例输出
    Bob
    
    
    讲解:摘抄的

    看起来像博弈题,其实和博弈没有一点关系。给一个原始集合,每次操作都会往集合中加入一个新的元素,找出最后集合中元素的个数total,然后用 total-n 就是新加进去的元素个数。判断total-n 的奇偶性就可以判断出谁赢了。如何求total呢?如果开始时集合中只有2个数6  27,通过这两个数可以加进集合的数有21  15  9  3,这个过程实际上就是求gcd(6,27)的过程,最小的数就是gcd(6,27)=3,还发现集合中的元素都是3的倍数,那我们只需要判断[1,27]之间3的倍数有多少个就行了。  解法:求出n个数中的最大值Max和这n个数的最大公约数p,判断(Max / p — n)的  奇偶性即可。奇数Alice赢。

    代码如下:

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 int gcd(int a,int b)
     5 {
     6     int r;
     7     while(b!=0)
     8     {
     9         r=a%b;
    10         a=b;
    11         b=r;
    12     }
    13     return a;
    14 }
    15 int main()
    16 {
    17     int n,a[120],i;
    18     while(cin>>n)
    19     {
    20         int Max=1;
    21         for(i=0;i<n;i++)
    22         {
    23             cin>>a[i];
    24             if(a[i]>Max)
    25             Max=a[i];
    26         }
    27         int p=a[0];
    28         for(i=1;i<n;i++)
    29            p=gcd(p,a[i]);
    30 
    31            int ans=Max/p-n;
    32             printf(ans&1 ? "Alice
    " : "Bob
    ");
    33     }
    34 
    35     return 0;
    36 }
  • 相关阅读:
    Java Review (十七、面向对象----枚举类)
    Java Review (十六、面向对象----Lambda 表达式)
    Java Review (十五、面向对象----内部类)
    Java Review (十四、面向对象----接口)
    Java Review (十三、面向对象----抽象类)
    Java Review (十二、面向对象----final 修饰符)
    Java Review (十一、面向对象----多态)
    Java Review (十、面向对象----继承)
    Java Review (九、面向对象----封装)
    Java Review (八、面向对象----成员变量和局部变量)
  • 原文地址:https://www.cnblogs.com/lovychen/p/3384871.html
Copyright © 2011-2022 走看看