<p>Given an array of points on the <strong>X-Y</strong> plane <code>points</code> where <code>points[i] = [x<sub>i</sub>, y<sub>i</sub>]</code>, return <em>the area of the largest triangle that can be formed by any three different points</em>. Answers within <code>10<sup>-5</sup></code> of the actual answer will be accepted.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<img alt="" src="https://s3-lc-upload.s3.amazonaws.com/uploads/2018/04/04/1027.png" style="height: 369px; width: 450px;" />
<pre>
<strong>Input:</strong> points = [[0,0],[0,1],[1,0],[0,2],[2,0]]
<strong>Output:</strong> 2.00000
<strong>Explanation:</strong> The five points are shown in the above figure. The red triangle is the largest.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> points = [[1,0],[0,0],[0,1]]
<strong>Output:</strong> 0.50000
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>3 &lt;= points.length &lt;= 50</code></li>
	<li><code>-50 &lt;= x<sub>i</sub>, y<sub>i</sub> &lt;= 50</code></li>
	<li>All the given points are <strong>unique</strong>.</li>
</ul>

class Solution {
public:
// (ΔABC) = (1/2) |x1(y2 − y3) + x2(y3 − y1) + x3(y1 − y2)|
    double areaFromThreePoints(vector<int> x1y1, vector<int> x2y2, vector<int> x3y3) {
        int x1=x1y1[0], y1=x1y1[1];
        int x2=x2y2[0], y2=x2y2[1];
        int x3=x3y3[0], y3=x3y3[1];
        return 0.5*abs(x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2));
    }
    double largestTriangleArea(vector<vector<int>>& p) {
        double mx = 0.0f;
        for (int i=0; i<p.size(); i++)
            for (int j=i+1; j<p.size(); j++)
                for (int k=j+1; k<p.size(); k++)
                    mx = max(mx, areaFromThreePoints(p[i], p[j], p[k]));
        return mx;
    }
};
34200