解题思路:
注意事项:
参考代码: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分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复