解题思路:

注意事项:

参考代码:import math
def get_primes(max_val):
   v = [True] * (max_val + 1)
   for x in range(2, max_val + 1):
       if not v[x]:
           continue
       for y in range(x * 2, max_val + 1, x):
           v[y] = False
   primes = [x for x in range(2, max_val + 1) if v[x]]
   return primes
def win(x):
   if memo[x] != 0:
       return memo[x] == 1
   if x <= 1:
       return False
   for i in range(bis(x), -1, -1):
       if not win(x - primes[i]):
           memo[x] = 1
           return True
   memo[x] = -1
   return False
def bis(x):
   l = 0
   r = len(primes)
   while l < r:
       m = (l + r) // 2
       if primes[m] <= x:
           l = m + 1
       else:
           r = m
   return l-1
T = int(input())
woods = [int(input()) for _ in range(T)]
max_wood = max(woods)
primes = get_primes(max_wood)
memo = [0] * (max_wood + 1)
for wood in woods:
   result = 1 if win(wood) else 0
   print(result)

点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论