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

Number Game

时间:2020-06-24 19:32:55      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:inline   复杂   个人   lan   http   pac   偶数   大于   形式   

题意:

给出同一个数 \(n\) \((1\leq n \leq 10^9)\),两个人玩游戏,有两种操作:
1.除以一个大于 \(1\) 的奇数因子
2.当 \(n>1\) 时,可以减 \(1\)
无法操作的人输。
传送门

分析:

题目想复杂了,首先可以发现:
\(n=1\),必输;
\(n=2\),必胜;
\(n>1\& \& n\) 为奇数,必胜;
剩下对 \(n\) 为大于 \(2\) 的偶数的情况进行讨论:如果 \(n\) 有一个奇数的因子 \(a\),除以该因子的得到的数为is \(b\),是偶数。但偶数的情况不确定,那么,如何判断呢?当 \(b\) 为必胜时,那么 \(b\) 一定可以分解成一个奇数乘一个必败的偶数的形式,把此时得到的奇数和上一步的奇数合并得到一个更大的奇数,即当 \(b\) 有一个奇数因子,且除该因子的结果不为 \(2\),则必胜 \(b\) 为必胜。 如果 \(b\) 除奇数因子得到的偶数为必胜的,那么该偶数一定可以通过再次分解得到一个奇数和一个必败偶数。而只有该偶数为 \(2\) 时是不可分解的。

代码:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        if(n==1) printf("FastestFinger\n");
        else if(n==2) printf("Ashishgup\n");
        else if(n%2==1) printf("Ashishgup\n");
        else
        {
            int f=0;
            for(int i=2;i*i<=n;i++)
            {
                if(n%i) continue;
                if((i&1)&&(n/i)!=2) f=1;
                if(((n/i)&1)&&i!=2) f=1;
            }
            if(f) printf("Ashishgup\n");
            else printf("FastestFinger\n");
        }
    }
    return 0;
}

Number Game

标签:inline   复杂   个人   lan   http   pac   偶数   大于   形式   

原文地址:https://www.cnblogs.com/1024-xzx/p/13189216.html

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