51nod-1831 小C的游戏(博弈+找规律)

题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1831

这道题我开始还以为要用SG函数,或者是我不知道的博弈方法,结果打个表之后发现这是个找规律的题,这个题的规律藏的还挺深的。另外还要注意的是,这个题的题面有问题,有一个操作应为将石子等分之后,取出一堆,并用这一堆继续进行游戏(不是将这一堆拿出去啊)。还有,这道题说的是最后一个取的人输,不是常规的无法取石子的人败,在分析NP状态时要注意一下。

下面是AC代码:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;

bool isprime(int n)
{
    for(int i = 2;i <= sqrt(n+0.5);i++)
        if(n % i == 0)
            return false;
    return true;
}
int main()
{
    int t,n;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        if(n == 1 || (isprime(n) && (n != 2 && n != 17)) || (!isprime(n) && (n == 16 || n == 34 || n == 289)))
            printf("NIE\n");
        else
            printf("TAK\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/water_zero_saber/article/details/79995954
今日推荐