码迷,mamicode.com
首页 > 其他好文 > 详细

1 . 巴士博弈

时间:2017-08-05 23:41:11      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:span   ble   end   logs   pre   cond   acm   lock   nbsp   

2017-08-05   22:48:00 

问题模型:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个,最后取光者得胜。

 

问题分析 :

  甲要想赢,从最后一步考虑,那他面对的石子必须是  <= m  的 , 又因为m是  >= 1 的 ,所以倒数第二步的石子如果是m+1 的话,无论乙玩家怎么拿,甲一定会最后一步拿干净,从而获得胜利 ,这也就是前面小结所说到的奇异局势。

  那么规律找到,就是在一个人面对 n = ( m + 1 ) * r ( r 为任意常数 ),当他取走 k 个时 ,另一方就取 ( m + 1 - k ) 个 , 从而形成 (m+1)* ( r - 1 ) ,一直按此规律取下去 ,此人必输 。另一种情况一个人在面对 n = ( m + 1 ) * r + s  ( r , s 为任意常数 ) , 若他上来先拿走 s 个 ,接下来无论对手拿走多少个 ,他都拿 ( m + 1 - k ) 个 , 他最后一定 获胜 。

   

  参考题目 :HDU-1846   http://acm.hdu.edu.cn/showproblem.php?pid=1846

  本题代码 :

    

#include <iostream>
using namespace std ;

int main ( ) {
    int c , n , m ;

    cin >> c ;
    while ( c-- ) {
        cin >> n >> m ;
        if ( n % ( m + 1 ) )
            cout << "first" << endl ;
        else cout << "second" << endl ;
    }

    return 0 ;
}

  

  

1 . 巴士博弈

标签:span   ble   end   logs   pre   cond   acm   lock   nbsp   

原文地址:http://www.cnblogs.com/ccut-ry/p/7291834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!