最大/小矩形面积

问:给一些点集,求其中面积最大/小的矩形,矩形可以不平行于坐标轴

 

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的做法

 

posted @ 2018-08-29 20:51  miao_a_miao  阅读(296)  评论(0)    收藏  举报