在笛卡尔平面上从(0,0)到(R,C)的点被着色为R,g或b。用这些点做一个三角形-
a) All three vertices are of different colors.
b) At least one side of triangle is parallel to either of the axes.
c) Area of the triangle is maximum possible.
输出最大可能区域。
约束条件:
1<=R<=1000
,1<=C<=1000
有人能告诉我这个问题的解决方法吗?
最佳答案
三角形的面积是1/2 * base * height
所以如果三角形的一边平行于
X轴,然后三角形的底部由同一行上的两种颜色(尽可能远地散布)形成,第三色应该在离基最远的行上。因此,您可以对数据进行预处理以查找:
每种颜色的最上面和最下面一行
每行每种颜色的最左和最右列
对于每一行,你有十二种可能形成一个三角形,例如。
left-most-red, right-most-blue, top-most green
left-most-red, right-most-blue, bottom-most green
left-most-red, right-most-green, top-most blue
...
当然,有一个三角形的一个平行于Y轴的相应过程。
因此,该问题可以在
O(R*C)
时间内解决,其中大部分时间用于预处理。关于algorithm - 具有所有不同颜色顶点的三角形的最大面积,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40078660/