Farmer John 想要给他的奶牛们建造一个三角形牧场。
有 个栅栏柱子分别位于农场的二维平面上不同的点
。
他可以选择其中三个点组成三角形牧场,只要三角形有一条边与 轴平行,且有另一条边与
轴平行。
Farmer John 可以围成的牧场的最大面积是多少?
保证存在至少一个合法的三角形牧场。
输入格式
输入的第一行包含整数 。
以下 行每行包含两个整数
和
,均在范围
之内,描述一个栅栏柱子的位置。
输出格式
由于面积不一定为整数,输出栅栏柱子可以围成的合法三角形的最大面积的两倍。
数据范围
输入样例:
4
0 0
0 1
1 0
1 2
输出样例:
2
样例解释
位于点 和
的木桩组成了一个面积为
的三角形。所以,答案为
。
只有一个其他的三角形,面积为 。
解法一
using namespace std;
const int N = 110;
int n;
int a[N], b[N];
bool check(int i, int j, int k, int &area){
int x1 = a[i], y1 = b[i];
int x2 = a[j], y2 = b[j];
int x3 = a[k], y3 = b[k];
if((x1==x2 || x2==x3 || x1==x3) && (y1==y2 || y2==y3 || y1==y3)){
int x, y;
if(x1 == x2) y = abs(y1 - y2);
if(x2 == x3) y = abs(y2 - y3);
if(x1 == x3) y = abs(y1 - y3);
if(y1 == y2) x = abs(x1 - x2);
if(y2 == y3) x = abs(x2 - x3);
if(y1 == y3) x = abs(x1 - x3);
area = x * y;
return true;
}
return false;
}
int main(){
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i] >> b[i];
int res = 0;
for(int i = 2; i < n; i++)
for(int j = 0; j < i; j++)
for(int k = 0; k < j; k++){
int area;
if(check(i, j, k, area)){
res = max(res, area);
}
}
cout << res << endl;
return 0;
}
解法二
using namespace std;
const int N = 110;
int n;
int a[N], b[N];
int main(){
cin >> n;
for(int i = 0; i < n; i++) cin >> a[i] >> b[i];
int res = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
for(int k = 0; k < n; k++)
if(i != j && i != k && j != k)
if(a[i] == a[j] && b[j] == b[k])
res = max(res, abs(b[i]-b[j])*abs(a[j]-a[k]));
cout << res << endl;
return 0;
}