当前位置:编程学习 > C/C++ >>

HDU 2897 邂逅明下 (博弈)

题意:
给你n、p、q,每次操作是令n减小 [p, q]区间中的数,当n < p时必须全部取完了,取完最后一次的人算输,问先手必胜还是必败。
 
解题思路:
这种非常类似巴什博弈,可以找出必胜区间和必败区间,[1,p]为必败区间, [p+1, p+q]为必胜区间,很容易发现接下来的区间都是按照这个规律的,这种找出必胜(必败)区间或者必胜(必败)点的方法很常见的。
 
 
/* ********************************************** 
Author      : JayYe 
Created Time: 2013-10-31 15:32:47 
File Name   : JayYe.cpp 
*********************************************** */  
  
#include <stdio.h>  
#include <string.h>  
#include <algorithm>  
using namespace std;  
  
int main() {  
    int n, p, q;  
    while(scanf("%d%d%d", &n, &p, &q) != -1) {  
        if(n <= p)  {  
            puts("LOST");  
            continue;  
        }  
        n -= p;  
        if( n % (p+q) == 0 || n % (p+q) > q)  puts("LOST");  
        else    puts("WIN");  
    }  
    return 0;  
}  

 


补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,