文章目录
593. 有效的正方形
题目
枚举所有情况,然后四条边相等,且对角线相等不为0. 其实所有情况只有3中哈哈。
注意这种情况:
[0,0]
[1,1]
[0,0]
[0,1]
dis(p1,p2)=dis(p2,p3)=dis(p3,p4)=dis(p4,p1)=2,。。 但不是正方形。
class Solution {
public:
int dis(vector<int>&p1,vector<int>&p2){
return (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]);
}
bool isok(vector<int>& p1, vector<int>& p2, vector<int>& p3,vector<int>& p4){
int x=dis(p1,p2),y=dis(p2,p3),z=dis(p3,p4),w=dis(p4,p1);
return x==y&&y==z&&z==w&&dis(p1,p3)&&dis(p1,p3)==dis(p2,p4);
}
bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
return isok(p1,p2,p3,p4)||isok(p1,p2,p4,p3)||isok(p1,p3,p2,p4);
}
};
对角线平分垂直且相等。三种组合法:(p1,p2一对 剩下一对)、(p1,p3一对 剩下一对)、(p1,p4一对 剩下一对)
class Solution {
public:
const double eps=1e-5,INF=0x3f3f3f3f+0.1;
bool noequal(vector<int>&p1,vector<int>&p2){
return !(p1[0]==p2[0]&&p1[1]==p2[1]);
}
double getK(vector<int>&p1,vector<int>&p2){
if(p1[0]==p2[0]) return INF;
return ((double)p1[1]-p2[1])/(p1[0]-p2[0]);
}
int dis(vector<int>&p1,vector<int>&p2){
return (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]);
}
bool chuizhi(double k1,double k2){
if(fabs(k1-0)<=eps&&fabs(k2-INF)<=eps||fabs(k2-0)<=eps&&fabs(k1-INF)<=eps) return true;
return fabs(k1*k2-(-1))<=eps;
}
bool pingfen(vector<int>& p1, vector<int>& p2, vector<int>& p3,vector<int>& p4){
int x0=p1[0]+p2[0],y0=p1[1]+p2[1];
int x1=p3[0]+p4[0],y1=p3[1]+p4[1];
return x0==x1&&y0==y1;
}
bool isok(vector<int>& p1, vector<int>& p2, vector<int>& p3,vector<int>& p4){
return noequal(p1,p2)&&chuizhi(getK(p1,p2),getK(p3,p4))&&pingfen(p1,p2,p3,p4)&&dis(p1,p2)==dis(p3,p4);
}
bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {
return isok(p1,p2,p3,p4)||isok(p1,p3,p2,p4)||isok(p1,p4,p2,p3);
}
};
223. 矩形面积
class Solution {
public:
#define ll long long
ll get(int x1,int x2,int x3,int x4){
ll l=max(x1,x3),r=min(x2,x4);
return (r-l)<0?0:(r-l);//r-l会爆int。。
}
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
return (ll)(C-A)*(D-B)+(ll)(G-E)*(H-F)-(ll)get(A,C,E,G)*get(B,D,F,H);
}
};