思路: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 當輪到某一方拿卡片時,沒有滿足要求的卡片可選,則該方為...