谁能帮我找找错(悬两关)
  • 板块学术版
  • 楼主fxwqctb
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/9/27 18:37
  • 上次更新2024/9/27 20:01:41
查看原帖
谁能帮我找找错(悬两关)
1025129
fxwqctb楼主2024/9/27 18:37

本人写了篇题解,部分 Markdown 如下,目前找不到错误,请大佬帮忙找茬,悬两关。

首先先只考虑先手胜还是后手胜的情况。    
这道题是一道较为复杂的博弈论,由于每次可以取若干质数个石子,所以我们可以跑一遍线性筛,筛出 $20000$ 以内的所有质数。  

定义一个数组 $F$,当 $F_i=1$ 时代表先手必胜,否则为后手必胜。  
由于最小的质数为 $2$,所以 $F_0=F_1=1$,对于 $i\ge2$ 的情况,就要枚举一个质数 $j$,且保证 $i\ge j$,那么可以取一次,让石子个数为 $i-j$,如果取完一次石子后是后手必胜的情况,那么这个局面一定是先手必胜,如果无论如何取都是先手必胜的情况,则这个局面必定是先手必败的情况。  
所以我们可以跑遍 dp,就能算出所有后手必胜的情况。

## 2、考虑步数
步数是这一题的难点,必败方会拖延步数,必胜方会让步数尽量小。  
我们定义一个数组 $D$,代表步数,对于某个石子数 $i$,如果 $F_i=1$,则 $D_i$ 肯定要小,反之则要最大,定义变量 $min1$ 来记录最小,$max1$ 来记录最大,然后枚举质数 $j(j\le i)$,如果 $F_{i-j}=1$ 则更新最小值,否则更新最大值,最后判断一下结果,如果 $F_i=1$ 则 $D_i=min1+1$,否则 $D_i=max1+1$。
2024/9/27 18:37
加载中...