最大/小矩形面积
问:给一些点集,求其中面积最大/小的矩形,矩形可以不平行于坐标轴
n^4的做法
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<queue> #include<map> #include<vector> using namespace std; #define MOD 1000000007 const double eps=1e-5; #define cl(a) memset(a,0,sizeof(a)) #define ts printf("*****\n"); int vis[100]; struct Point{ int x,y; Point(){} Point(int x,int y){ this->x=x; this->y=y; } Point operator -(const Point p1){ return Point(x-p1.x,y-p1.y); } int operator ^(const Point p){ return x*p.x+y*p.y; } int dist(){ return x*x+y*y; } bool operator ==(const Point p){ return x==p.x&&y==p.y; } friend ostream & operator<<(ostream&,Point&); }; ostream & operator<<(ostream& stream, Point& p){ stream << p.x << " " << p.y << endl; return stream; } struct Line{ Point vec; Point a,b; Line(Point vec, Point a, Point b){ this->vec=vec; this->a=a; this->b=b; } }; bool samePoint(Line line1,Line line2){ Point w1=line1.a-line2.a; Point w2=line1.a-line2.b; if(w1.dist()==w2.dist()) return true; return false; } int main() { vector<Point> vcPoint; vector<Line> vcLine; Point p1(0,1); Point p2(1,0); Point p3(1,2); Point p4(2,2); Point p5(2,1); Point p6(-2,2); Point p7(2,-2); Point p8(-2,-2); vcPoint.push_back(p1); vcPoint.push_back(p2); vcPoint.push_back(p3); vcPoint.push_back(p4); vcPoint.push_back(p5); vcPoint.push_back(p6); vcPoint.push_back(p7); vcPoint.push_back(p8); for(int i=0;i<vcPoint.size();i++){ for(int j=i+1;j<vcPoint.size();j++){ vcLine.push_back(Line(vcPoint[i]-vcPoint[j],vcPoint[i],vcPoint[j])); } } for(int i=0;i<vcLine.size();i++){ for(int j=i+1;j<vcLine.size();j++){ Point a=vcLine[i].vec; Point b=vcLine[j].vec; int w=a^b; if(w==0&&vcLine[i].vec.dist()==vcLine[j].vec.dist()&&samePoint(vcLine[i],vcLine[j])){ Point line=vcLine[i].a-vcLine[j].b; cout<<line.dist()<<endl; cout<<vcLine[i].a<<endl; cout<<vcLine[i].b<<endl; cout<<vcLine[j].a<<endl; cout<<vcLine[j].b<<endl; } } } }
n^3的做法