杭电多校赛第二场 Game

Problem Description

Alice and Bob are playing a game.
The game is played on a set of positive integers from 1 to n.
In one step, the player can choose a positive integer from the set, and erase all of its divisors from the set. If a divisor doesn't exist it will be ignored.
Alice and Bob choose in turn, the one who cannot choose (current set is empty) loses.
Alice goes first, she wanna know whether she can win. Please judge by outputing 'Yes' or 'No'.

Input

There might be multiple test cases, no more than 10. You need to read till the end of input.
For each test case, a line containing an integer n. (1≤n≤500)

Output

A line for each test case, 'Yes' or 'No'.

Sample Input

 

1

Sample Output

 

Yes

该题就是简单的博弈题,当素数数量为奇数或者0时,ALICE赢,否则BOB

#include<bits/stdc++.h>

using namespace std;

int a[510] , book[510];

int main()
{
    book[1] = 1;
    for(int i = 2; i <= 500  ; i++ )
    {
        if(book[i])
            continue;
        if(!book[i])
        {
            for(int j = i + i ; j <= 500 ; j += i)
                book[j] = 1;
        }
    }
    int num = 0;
    for(int i = 1; i <= 500 ; i ++)
    {
        if(!book[i])
        {
            num ++;
            a[i] = num;
        }
    }
    int n ;
    while(~scanf("%d" , &n))
    {
        if(a[n] == 0)
        {
            printf("Yes\n");
            continue;
        }
        if(a[n] % 2 == 1)
            printf("Yes\n");
        else
            printf("No\n");
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/ant_e_zz/article/details/81214799