分块打表大法好!打表万岁!dalao保佑我打表进省队!(逃
传送门
题解
很显然,这题正解是数位DP,但是我觉得上分块打表会更好玩一些!
设块大为$S$,我们可以先写一个暴力,计算出S、2S、3S、4S……内一共有多少个windy数,把这个表事先打出来。由于$A、B$都比较小,打这个表不会用很长时间。蒟蒻我的机子还不错,八框框的i5 CPU,最高可以睿频到3.4GHz,用了四十多秒就跑完了。然后根据容斥原理,最后的答案是$Solve(B)-Solve(A-1)$,其中$Solve(x)$用于求解共有多少个windy数$\in[1,x]$。且必有$x \in [kS,(k+1)S]$。$Solve(kS)$已经事先打过表了,暴力枚举并检验$[kS+1,x]$中有多少个windy数即可。为了减少最终代码长度,令$S=10^6$或$10^7$即可。
代码
还好,不是很长呢poi。
1 |
|