判定给定边长可否构成三角形的一个定理

本定理来自一道算法竞赛题:

给定任意多条边,每条边都是不超过1,000,000,000的正整数。请给出一个算法,判断其中是否存在3条边可以构成三角形。

应用该定理可以有效地解决此问题。

定理

给定n个边长,如果其中最大的边长与最小的边长的比值小于第n个斐波那契数,那么其中必存在3个边长可以构成三角形。

应用

由题中条件可知,最大的边长和最短的边长的比值不超过\(1,000,000,000 < F_{45}\)。所以,只要边的个数达到45,根据上述定理,就必然存在3条边可以构成三角形。如果边的个数少于45个,也很好办,穷举解决即可(\({45 \choose 3} = 14190\),穷举量很小)。

继续阅读 →

连连看游戏中的配对路径搜索

在连连看游戏中,两个图案可以消去的条件是:

  1. 两者图案相同。
  2. 两种直接存在一条通路,它是一条只经过没有图案的地方、且转折点不超过2个的折线。满足此条件的两个图案被称为是可相连的。

要判断条件1非常容易,所以主要考虑怎样判断条件2。举一个具体的例子如下,图中空格表示没有图案的地方,字母和#表示图案,-+|表示路径。

          
 ### ##A# 
 # ### |# 
 +-----+# 
 A####### 
          

在这个例子中,A和A是可相连的。图中所给出的路径含有两个转折点。

对于此类问题,能否给出一个普遍的判断方法?在实际问题中(例如在连连看游戏里),如果判定两个图案是可相连的,还要指出一条具体的路径。

继续阅读 →