首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

HDU 5512 Pagodas:博弈論 + 數論判定贏家

     編輯:關於C++

遊戲規則

初始有塔 a, b。雙方輪流建塔,新塔編號 i = j + k 或 i = |j - k|(j,k 為現有塔)。無法建塔者負。Yuwgna 先手。

核心數學結論

  1. 若 {a,b} 中含 1,則可生成所有 1..n 的塔(因 1 可與任意數生成其前驅/後繼)。總塔數 = n,先手勝 ⇔ n 為奇數。
  2. 若 gcd(a,b) = 1,由貝祖定理可線性組合出 1,歸結為情況 1,先手勝 ⇔ n 奇數。
  3. 若 d = gcd(a,b) > 1,所有生成塔均為 d 的倍數。可建塔數 = n/d(向下取整)。先手勝 ⇔ n/d 為奇數。

算法流程


複雜度

每測試用例 O(log max(a,b)),極快。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved