13 4 約數倍數選卡片

2021-09-22 12:29:48 字數 1913 閱讀 8310

閒暇時,福爾摩斯和華生玩乙個遊戲:

在n張卡片上寫有n個整數。兩人輪流拿走一張卡片。要求下乙個人拿的數字一定是前乙個人拿的數字的約數或倍數。例如,某次福爾摩斯拿走的卡片上寫著數字「6」,則接下來華生可以拿的數字包括:

1,2,3, 6,12,18,24 ....

當輪到某一方拿卡片時,沒有滿足要求的卡片可選,則該方為輸方。

請你利用計算機的優勢計算一下,在已知所有卡片上的數字和可選哪些數字的條件下,怎樣選擇才能保證必勝!

當選多個數字都可以必勝時,輸出其中最小的數字。如果無論如何都會輸,則輸出-1。

輸入資料為2行。第一行是若干空格分開的整數(每個整數介於1~100間),表示當前剩餘的所有卡片。

第二行也是若干空格分開的整數,表示可以選的數字。當然,第二行的數字必須完全包含在第一行的數字中。

程式則輸出必勝的招法!!

例如:使用者輸入:

2 3 6

3 6則程式應該輸出:

3再如:

使用者輸入:

1 2 2 3 3 4 5

3 4 5

則程式應該輸出:

4資源約定:

峰值記憶體消耗 < 64m

cpu消耗  < 1000ms

如果我拿了一張牌,並且沒有其他的約數或倍數可拿,顯然這是我的必勝態。如果在這之前,對方也拿了一張牌,顯然對他來說他拿的那張牌就是必敗態,所以這種博弈裡,必勝態和必敗態是交替出現的 

但要確定是必敗還是必勝,不抽到最後一張還是不能確定,所以要把所有可能的抽卡情況搜尋出來,只有確定抽了這張牌,之後所有的情況都是必敗,我才能確定這張牌是必勝.(只有隊友的博才會大膽直接引用,哈哈)

num = [0 for _ in range(10000)]

collect = [0 for _ in range(1000)]

num[:] = map(int,input().split())

len1 = len(num)

ch = [0 for _ in range(10000)]

ch[:] = map(int,input().split())

len2 = len(ch)

choice = [ for _ in range(500)]

for i in range(len1):

collect[num[i]]+=1

def dfs(x): #模擬交替選牌,深搜當前狀態必勝或必敗

i=len(choice[x])-1

while i>=0:

if collect[choice[x][i]]>0:

collect[choice[x][i]]-=1

t = dfs(choice[x][i]) #獲取下乙個狀態

collect[choice[x][i]]+=1

if t==-1: #下乙個狀態是必勝

return 1 #那麼當前狀態必敗

i-=1

return -1 #沒有下乙個約數或倍數了,取到這個x的人必勝

for i in range(1,101):

if collect[i]>0:

collect[i]-=1

for j in range(1,101):

if collect[j]>0 and (i%j==0 or j%i==0):

collect[i]+=1

ch = sorted(ch)

flag=0

for i in range(len(ch)):

collect[ch[i]]-=1

t = dfs(ch[i])

if t==-1:

print(ch[i])

flag=1

break

collect[ch[i]]+=1

if flag==0:

print(-1)

約數倍數選卡片

問題描述 閒暇時,福爾摩斯和華生玩乙個遊戲 在n張卡片上寫有n個整數。兩人輪流拿走一張卡片。要求下乙個人拿的數字一定是前乙個人拿的數字的約數或倍數。例如,某次福爾摩斯拿走的卡片上寫著數字 6 則接下來華生可以拿的數字包括 1,2,3,6,12,18,24 當輪到某一方拿卡片時,沒有滿足要求的卡片可選...

藍橋杯 約數倍數選卡片

問題描述 閒暇時,和華生玩乙個遊戲 在n張卡片上寫有n個整數。兩人輪流拿走一張卡片。要求下乙個人拿的數字一定是前乙個人拿的數字的約數或倍數。例如,某次福爾摩斯拿走的卡片上寫著數字 6 則接下來華生可以拿的數字包括 1,2,3,6,12,18,24 當輪到某一方拿卡片時,沒有滿足要求的卡片可選,則該方...

歷屆試題 約數倍數選卡片 博弈論?dfs

問題描述 閒暇時,福爾摩斯和華生玩乙個遊戲 在n張卡片上寫有n個整數。兩人輪流拿走一張卡片。要求下乙個人拿的數字一定是前乙個人拿的數字的約數或倍數。例如,某次福爾摩斯拿走的卡片上寫著數字 6 則接下來華生可以拿的數字包括 1,2,3,6,12,18,24 當輪到某一方拿卡片時,沒有滿足要求的卡片可選...