南洋理工OJ ——23题 取石子

         第一次做这道题的时候,栽到了“最多”上,没有看清题意,贸然的以为俩人每次都取m个石子了,结果。。历经无数次的wrong answer后。。终于发现原来是每次每人最多趣m个石子。。Orz

         那么正确的做法是什么呢?——

         思路:

             要想让TT赢,必须保证最后一次TT拿的时候剩下的石子数小于m,即倒数第二次拿时,石头有m+1个,整理得到公式:n=(m+1) b + a:第一次TT取a个,第二个人取1<=t<=m个,再轮到TT取时,她/他只要取k=(m+1)- t个就可以保证最后一次一定是TT取~必胜公式!!当然若m>n,则TT也肯定赢~

     代码:

#include 
using namespace std;
int main()
{
    int m;
    cin>>m;
    while (m--)
        {
            int a,b;
            cin>>a>>b;
            if (a % ( b + 1 ) == 0 && a>b)
            {
                cout<<"Lose"<

ps:若还是不太明白,请看大神的解释:

http://www.cnblogs.com/kuangbin/archive/2011/08/27/2155827.html

                   

你可能感兴趣的:(算法,ACM/nyOJ)