HDU 2897 邂逅明下 ( bash 博弈變形
阿新 • • 發佈:2018-02-19
span 博弈 void hdu 第一次 ack [] clas mar
HDU 2897 邂逅明下 ( bash 博弈變形
題目大意
有三個數字n,p,q,表示一堆硬幣一共有n枚,從這個硬幣堆裏取硬幣,一次最少取p枚,最多q枚,如果剩下少於p枚就要一次取完。兩人輪流取,直到堆裏的硬幣取完,最後一次取硬幣的算輸。
解題思路
- 若 n == k * (p + q), 則 A 必勝 第一次 A 取 p 個, 之後每次 B 取 x 個時, A 取 (p + q - x) 個, 則最後當 B 面對有 p 個硬幣的時候, 必輸.
- 若 n == k * (p + q) + left, left <= p, 則 B必勝 , 若 A 取 x 個, 則 B 取 (p + q - x) 個, 則最後 A 會面對 有 left (left <= p) 的情況, p 必輸.
- 若 n == k * (p + q) + left, left > p, 則 A必勝 , 第一輪 A 取 t (1 < left - t < p) 個, 之後每次 B 取 x 個時, A 取 (p + q - x) 個, 則最後當 B 面對有 t (1 < left - t < p) 個硬幣的時候, 必輸.
代碼
package 博弈;
import java.util.Scanner;
public class HDU2897 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()) {
int n = in.nextInt();
int p = in.nextInt();
int q = in.nextInt();
if(n % (p + q) == 0)
System.out.println("WIN");
else {
int left = n % (p + q);
if (left <= p)
System.out.println("LOST");
else if(left > p)
System.out.println("WIN");
}
}
}
}
HDU 2897 邂逅明下 ( bash 博弈變形