1. 程式人生 > >HDU 2149 Public Sale

HDU 2149 Public Sale

ron 不想 而且 字典 -s 題目 pan lin 多少

Public Sale

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9694 Accepted Submission(s): 5797


Problem Description

雖然不想,但是現實總歸是現實,Lele始終沒有逃過退學的命運,因為他沒有拿到獎學金。現在等待他的,就是像FarmJohn一樣的農田生涯。

要種田得有田才行,Lele聽說街上正在舉行一場別開生面的拍賣會,拍賣的物品正好就是一塊20畝的田地。於是,Lele帶上他的全部積蓄,沖往拍賣會。

後來發現,整個拍賣會只有Lele和他的死對頭Yueyue。

通過打聽,Lele知道這場拍賣的規則是這樣的:剛開始底價為0,兩個人輪流開始加價,不過每次加價的幅度要在1~N之間,當價格大於或等於田地的成本價 M 時,主辦方就把這塊田地賣給這次叫價的人。

Lele和Yueyue雖然考試不行,但是對拍賣卻十分精通,而且他們兩個人都十分想得到這塊田地。所以他們每次都是選對自己最有利的方式進行加價。

由於Lele字典序比Yueyue靠前,所以每次都是由Lele先開始加價,請問,第一次加價的時候,
Lele要出多少才能保證自己買得到這塊地呢?

Input

本題目包含多組測試,請處理到文件結束(EOF)。每組測試占一行。
每組測試包含兩個整數M和N(含義見題目描述,0<N,M<1100)

Output

對於每組數據,在一行裏按遞增的順序輸出Lele第一次可以加的價。兩個數據之間用空格隔開。
如果Lele在第一次無論如何出價都無法買到這塊土地,就輸出"none"。

Sample Input

4 2 3 2 3 5

Sample Output

1 none 3 4 5

分析

bash博弈。

每次最多去m個,取到最後一個的獲勝。

那麽如果n=m+1,則先手必敗。同樣的,n%(m+1)=0,先手也是必敗(先手不論取多少個,後手總可以使先手處於下一個必敗態)。

比如m=5,那麽n=6的話,先手必敗。n=12,不論先手取多少個,下一個狀態一定處於[7,11]之間,後手可以取小於m個,使先手又處於必敗態(6)。

那麽n不是處於必敗態,那就是必勝態,先手總可以取小於m個,使後手出於必敗態。

code

 1 #include<cstdio>
 2 
 3 int main () {
 4     int n,m;
 5     while (~scanf("%d%d",&n,&m)) {
 6         if ( n % (m+1) == 0) puts("none");
 7         else {
 8             if (n <= m) {
 9                 for (int i=n; i<m; ++i) printf("%d ",i);
10                 printf("%d",m);
11             }
12             else printf("%d",n%(m+1));
13             puts("");
14         }
15     }
16 }

HDU 2149 Public Sale