首先我们读题,意思是:小z和小r玩一个报数游戏promax原神版:任何一个十进制中含有数字7 的数,它的所有倍数都不能报出来,必须跳过,所以会出现连续跳过很多次的情况。现在让我们找报完一个数后应该报的下一个数。
我们可以看到,T最大是20万,最大的数为100万,所以真的按照游戏一个一个找的话你就输了。
那有什么办法呢?
我们先联想到批量找质数:一般来说是用埃式筛法,就是把合数都筛掉,剩下的就是质数了。
如果vis里还有元素为0(除0 1以外),那它的下标就是质数。
那么,这种方法能应用到这道题上吗?
再仔细看看题:含有数字7 的数,它的所有倍数都不能报出来。
所以,我们可以把含有数字7的数的倍数都筛掉,剩下的就是可以报出的数了。
代码:
不会有人真的拿这段代码去提交了吧嘿嘿
然后再补上mian:
OK来合并起来测试:
成功TLE了
什么???已经这么优化了还超时?????
你先别急
如果一个一个找下一个数的话,万一有两个数间隔很大怎么办?
所以我们还得想办法
定义一个to_next数组吧,其中的下标如果符合条件的话,对应的元素就指向下一个数(完美解决!)
好的,然后再稍微改一下mian函数里的
完整版AC代码:
ok成功AC!
看完了点个赞呗~