日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ练习题 又见Alice and Bob

發(fā)布時間:2025/3/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ练习题 又见Alice and Bob 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

又見Alice and Bob

時間限制:1000?ms ?|? 內(nèi)存限制:65535?KB 描述

集訓(xùn)生活如此乏味,于是AliceBob發(fā)明了一個新游戲。規(guī)則如下:首先,他們得到一個集合包含n個特定的整數(shù),接著他們輪流做以下操作,每一次操作,Alice或者Bob(輪到誰就是誰)會從集合中選擇兩個整數(shù)x?和?y?,(但是集合中不能包含|?x?-?y|),接著他就會把整數(shù)|x?-?y|?加入集合,因此,集合中的數(shù)據(jù)多加了一個……

如果當(dāng)前玩家不能執(zhí)行操作了,他就輸了。問題是如果AliceBob都很聰明的情況下,誰能獲勝呢?Alice是首先執(zhí)行操作。

輸入
多組測試數(shù)據(jù),每組測試數(shù)據(jù)包含兩行。
第一行一個整數(shù)n( n <= 110),初始集合包含元素的個數(shù)
第二行依次輸入n個數(shù)a1,a2……an,(1 <= ai <= 10^9)以空格分開,代表集合元素。
輸出

如果Alice 獲勝輸出 “Alice”,否者輸出“Bob”

樣例輸入
3 4 5 6
樣例輸出
Alice

看起來像博弈題,其實(shí)和博弈沒有一點(diǎn)關(guān)系。給一個原始集合,每次操作都會往集合中加入一個新的元素,找出最后集合中元素的個數(shù)total,然后用 total-n 就是新加進(jìn)去的元素個數(shù)。判斷total-n 的奇偶性就可以判斷出誰贏了。如何求total呢?如果開始時集合中只有2個數(shù)6 ?27,通過這兩個數(shù)可以加進(jìn)集合的數(shù)有21 ?15 ?9 ?3,這個過程實(shí)際上就是求gcd(6,27)的過程,最小的數(shù)就是gcd(6,27)=3,還發(fā)現(xiàn)集合中的元素都是3的倍數(shù),那我們只需要判斷[1,27]之間3的倍數(shù)有多少個就行了。 ?解法:求出n個數(shù)中的最大值Max和這n個數(shù)的最大公約數(shù)p,判斷(Max / p — n)的 ?奇偶性即可。奇數(shù)Alice贏。

#include<stdio.h> int gcd(int a, int b) {int r;while(b != 0){r = a % b;a = b;b = r;}return a; } int main() {int n, a[120], i;while(~scanf("%d",&n)){int Max = 1;for(i = 0; i < n; i++){scanf("%d", &a[i]);if(a[i] > Max)Max = a[i];}int p = a[0]; for(i = 1; i < n; i++)p = gcd(p, a[i]);int ans = Max/p - n;printf(ans&1 ? "Alice\n" : "Bob\n");}return 0; }

總結(jié)

以上是生活随笔為你收集整理的NYOJ练习题 又见Alice and Bob的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。