TopCoder SRM 4XX DIV 2 Level 3

忘了是SRM几了。。不过是道好题啊。。
已知三个整数x,y,z。。给出它们的上下界。。求出x*y=z的三元组有几个。。
由于上下界是10^10次方的。。暴力枚举x和y的话是10^20。。只能去死。。
如果枚举z。。然后可以根据y的上下界得出满足条件的x的上下界。。再与真实的x上下界求交。。
是10^10。。还是太慢了。。。
想了N久。。最后灵机一动。。
核心就是要降低枚举的复杂度。。注意到下界可以通过减法原理消掉。。那么只需要考虑上界。。
问题就变成了:
 x,y,z>=1
x<=maxx
y<=maxy
x*y=z<=maxz
关键就是如果x*y<=maxz的话,那么x和y必然有一个小于根号z。。
首先枚举x小于根号z的情况,然后枚举y小于根号z求x大于跟号z的情况(防止重复)。10^5。。问题就解决了。。
忘了是SRM几了。。找不到代码了。。

Leave a Reply

Your email address will not be published. Required fields are marked *