藍橋杯 PREV 17 約數倍數選卡片(對抗搜尋)

2021-10-03 23:34:13 字數 928 閱讀 4432

思路:1.這是博弈問題的一般方法,用dfs進行對抗搜尋,遍歷所有可能,雙方在每一步都選取最優步驟;

2.單純dfs會超時,我們知道越大的數,它的約數+倍數個數就相對可能越少,因此我們優先遍歷大數即可;

**:

#include

using

namespace std;

bool flag;

vector<

int> v[

105]

;int cnt[

105]

;inline

intread()

x = c -

'0';

while

(c =

getchar()

, c >=

'0'&& c <=

'9') x = x *10+

(c -

'0');if

(flag) v[0]

.push_back

(x);

else

++cnt[x];if

(c ==

'\n'

) flag =

true

;return1;

}inline

void

cal(

int n)

}for

(int i = n <<

1; i <=

100; i +

= n)

sort

(v[n]

.begin()

, v[n]

.end()

, greater<

int>()

);}int

dfs(

int x)

}return-1

;}intmain()

藍橋杯 約數倍數選卡片

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

約數倍數選卡片

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

13 4 約數倍數選卡片

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