contest 0816 quad [倍增][找规律]

contest 0816 quad [倍增][找规律]

难得一遇的好题!

满足什么条件的四条边才能构成四边形?最大的一条边权小于另三条边边权之和。

30pts

暴力可过

直接暴力找出两个点之间的路径,把点权排序,看相邻的四个点的点权能否构成四边形

时间复杂度 O ( q n )

50pts

这单独的20分设置很蹊跷,点权不大于3是什么操作?

我们会发现只有1 1 1 3这样的边权才不能构成一个四边形,于是就可以高效率地得到这20分。因为只要最大的一条边的边权小于等于另三条边之和,就一定够不成四边形。

100pts

回到50pts的解法,我们考虑构造一个尽可能长的、连续四个数恰好不能构成四边形的数列。根据贪心原则,第四个数应该恰好等于前三个数之和。于是我们得到了这样一个数列:1 1 1 3 5 9 17 … 再加上边权最大不超过 1 e 9 ,打表可得,数列的长度为36。也就是说,只要一条路径的长度(路径上边的数量)超过了36,那么这条路径的点权一定能够构成四边形;如果路径长度没有超过36,直接按照30pts的方法暴力判断。

时间复杂度 O ( q 36 )

猜你喜欢

转载自blog.csdn.net/ArliaStark/article/details/81836362