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

HDU 2149 Public Sale:巴什博奕遊戲變體

     編輯:關於C++

題目

兩人輪流報價,每次可在上次基礎上加 1~n。先報到 ≥ m 者勝。求先手必勝的首報價格集合。輸出所有可行首報價,若無則輸出 "none"。

巴什博奕結論

標準巴什博奕:每次取 1~n,拿走最後一個勝。先手勝 ⇔ m % (n+1) ≠ 0,首取 m % (n+1)。
本題變體:目標是「報到 ≥ m」,且首報價可在 1~m 任意選。分析得:
• 若 M % (N+1) == 0 → 先手必敗,輸出 none。
• 否則首報價為 s = M % (N+1),以及 s + (N+1), s + 2(N+1), ... 直到 ≤ N(首報價不能超過 N)。

代碼 (C++)

#include <cstdio>
int main() {
    int M, N;
    while (scanf("%d%d", &M, &N) == 2) {
        int r = M % (N + 1);
        if (r == 0) { puts("none"); continue; }
        printf("%d", r);
        for (int i = r + N + 1; i <= N; i += N + 1)
            printf(" %d", i);
        puts("");
    }
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved