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 }
  • 相关阅读:
    POJ 3261 Milk Patterns (求可重叠的k次最长重复子串)
    UVaLive 5031 Graph and Queries (Treap)
    Uva 11996 Jewel Magic (Splay)
    HYSBZ
    POJ 3580 SuperMemo (Splay 区间更新、翻转、循环右移,插入,删除,查询)
    HDU 1890 Robotic Sort (Splay 区间翻转)
    【转】ACM中java的使用
    HDU 4267 A Simple Problem with Integers (树状数组)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4417 Super Mario (树状数组/线段树)
  • 原文地址:https://www.cnblogs.com/lovychen/p/3384871.html
Copyright © 2011-2022 走看看