contest 0816 quad [倍增][找规律]
难得一遇的好题!
满足什么条件的四条边才能构成四边形?最大的一条边权小于另三条边边权之和。
30pts
暴力可过
直接暴力找出两个点之间的路径,把点权排序,看相邻的四个点的点权能否构成四边形
时间复杂度 O(q∗n) O ( q ∗ n )
50pts
这单独的20分设置很蹊跷,点权不大于3是什么操作?
我们会发现只有1 1 1 3这样的边权才不能构成一个四边形,于是就可以高效率地得到这20分。因为只要最大的一条边的边权小于等于另三条边之和,就一定够不成四边形。
100pts
回到50pts的解法,我们考虑构造一个尽可能长的、连续四个数恰好不能构成四边形的数列。根据贪心原则,第四个数应该恰好等于前三个数之和。于是我们得到了这样一个数列:1 1 1 3 5 9 17 … 再加上边权最大不超过 1e9 1 e 9 ,打表可得,数列的长度为36。也就是说,只要一条路径的长度(路径上边的数量)超过了36,那么这条路径的点权一定能够构成四边形;如果路径长度没有超过36,直接按照30pts的方法暴力判断。
时间复杂度 O(q∗36) O ( q ∗ 36 )