题目大意:

与这堆石子的总个数互质。求谁会胜利。


思路:

明显的博弈论之

代码:

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

const int N=1000000;
int t,n,sg[N+50],k,ans,x;

void find_prime()  //筛质数
{
    sg[1]=k=1;
    for (int i=2;i<=N;i++)
    {
        if (sg[i]) continue;  //不是质数
        sg[i]=++k; 
        for (int j=i;j<=N;j+=i)
         if (!sg[j]) sg[j]=k;  //if语句是必须的,因为合数的SG值是它最小值因子的SG值
    }
    return;
}

int main()
{
    scanf("%d",&t);
    find_prime();
    while (t--)
    {
        scanf("%d",&n);
        ans=0;
        for (int i=1;i<=n;i++)  
        {
            scanf("%d",&x);
            ans^=sg[x];  //异或,不懂情科普博弈论普及知识
        }
        if (ans) printf("Alice\n");
         else printf("Bob\n");
    }
    return 0;
}

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-26
  • 2021-06-29
  • 2022-12-23
  • 2021-08-07
  • 2021-07-28
猜你喜欢
  • 2022-02-04
  • 2022-02-07
  • 2021-10-22
  • 2022-01-19
  • 2021-09-06
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案