1 条题解
-
0
C++ :
#include<iostream> #include<stdio.h> using namespace std; double areaOfintersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4); int main() { int N; cin >> N; double *x1 = new double[N]; double *x2 = new double[N]; double *x3 = new double[N]; double *x4 = new double[N]; double *y1 = new double[N]; double *y2 = new double[N]; double *y3 = new double[N]; double *y4 = new double[N]; double *S = new double[N]; for(int i = 0; i < N; i++) { cin >> x1[i] >> y1[i] >> x2[i] >> y2[i]; cin >> x3[i] >> y3[i] >> x4[i] >> y4[i]; S[i] = areaOfintersection(x1[i], y1[i], x2[i], y2[i], x3[i], y3[i], x4[i], y4[i]); } for(int i = 0; i < N; i++) { printf("%0.2lf\n", S[i]); } delete [] x1; delete [] x2; delete [] x3; delete [] x4; delete [] y1; delete [] y2; delete [] y3; delete [] y4; delete [] S; return 0; } //前提:两矩形的边都平行于X轴或者Y轴,x1,x2,x3,x4,y1,y2,y3,y4为矩形对角线的坐标1,2为一个,3,4为一个 double areaOfintersection(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4) { //确保x1 < x2 , y1 < y2 , x3 < x4 , y3 < y4 if(x1 > x2) { x1 += x2; x2 = x1 - x2; x1 -= x2; } if(y1 > y2) { y1 += y2; y2 = y1 - y2; y1 -= y2; } if(x3 > x4) { x3 += x4; x4 = x3 - x4; x3 -= x4; } if(y3 > y4) { y3 += y4; y4 = y3 - y4; y3 -= y4; } // double S = 0;//相交的面积 double a = 0;//a,b为相交的矩形的两边长 double b = 0; bool flag_x42 = x4 >= x2 ? 1 : 0; bool flag_x41 = x4 >= x1 ? 1 : 0; bool flag_x32 = x3 >= x2 ? 1 : 0; bool flag_x31 = x3 >= x1 ? 1 : 0; bool flag_y42 = y4 >= y2 ? 1 : 0; bool flag_y41 = y4 >= y1 ? 1 : 0; bool flag_y32 = y3 >= y2 ? 1 : 0; bool flag_y31 = y3 >= y1 ? 1 : 0; //x4 > x2 > x3 > x1, y4 > y2 > y3 > y1 if(flag_x42 && flag_x41 && !flag_x32 && flag_x31 && flag_y42 && flag_y41 && !flag_y32 && flag_y31) { a = x2 - x3; b = y2 - y3; S = a * b; } //x4 > x2 > x3 > x1, y4 > y2 > y1 > y3 if(flag_x42 && flag_x41 && !flag_x32 && flag_x31 && flag_y42 && flag_y41 && !flag_y32 && !flag_y31) { a = x2 - x3; b = y2 - y1; S = a * b; } //x4 > x2 > x1 > x3, y4 > y2 > y3 > y1 if(flag_x42 && flag_x41 && !flag_x32 && !flag_x31 && flag_y42 && flag_y41 && !flag_y32 && flag_y31) { a = x2 - x1; b = y2 - y3; S = a * b; } //x4 > x2 > x1 > x3, y4 > y2 > y1 > y3 if(flag_x42 && flag_x41 && !flag_x32 && !flag_x31 && flag_y42 && flag_y41 && !flag_y32 && !flag_y31) { a = x2 - x1; b = y2 - y1; S = a * b; } //x4 > x2 > x3 > x1, y2 > y4 > y3 > y1 if(flag_x42 && flag_x41 && !flag_x32 && flag_x31 && !flag_y42 && flag_y41 && !flag_y32 && flag_y31) { a = x2 - x3; b = y4 - y3; S = a * b; } //x4 > x2 > x1 > x3, y2 > y4 > y3 > y1 if(flag_x42 && flag_x41 && !flag_x32 && !flag_x31 && !flag_y42 && flag_y41 && !flag_y32 && flag_y31) { a = x2 - x1; b = y4 - y3; S = a * b; } //x4 > x2 > x3 > x1, y2 > y4 > y1 > y3 if(flag_x42 && flag_x41 && !flag_x32 && flag_x31 && !flag_y42 && flag_y41 && !flag_y32 && !flag_y31) { a = x2 - x3; b = y4 - y1; S = a * b; } //x4 > x2 > x1 > x3, y2 > y4 > y1 > y3 if(flag_x42 && flag_x41 && !flag_x32 && !flag_x31 && !flag_y42 && flag_y41 && !flag_y32 && !flag_y31) { a = x2 - x1; b = y4 - y1; S = a * b; } //x2 > x4 > x3 > x1, y4 > y2 > y3 > y1 if(!flag_x42 && flag_x41 && !flag_x32 && flag_x31 && flag_y42 && flag_y41 && !flag_y32 && flag_y31) { a = x4 - x3; b = y2 - y3; S = a * b; } //x2 > x4 > x1 > x3, y4 > y2 > y3 > y1 if(!flag_x42 && flag_x41 && !flag_x32 && !flag_x31 && flag_y42 && flag_y41 && !flag_y32 && flag_y31) { a = x4 - x1; b = y2 - y3; S = a * b; } //x2 > x4 > x3 > x1, y4 > y2 > y1 > y3 if(!flag_x42 && flag_x41 && !flag_x32 && flag_x31 && flag_y42 && flag_y41 && !flag_y32 && !flag_y31) { a = x4 - x3; b = y2 - y1; S = a * b; } //x2 > x4 > x1 > x3, y4 > y2 > y1 > y3 if(!flag_x42 && flag_x41 && !flag_x32 && !flag_x31 && flag_y42 && flag_y41 && !flag_y32 && !flag_y31) { a = x4 - x3; b = y2 - y3; S = a * b; } //x2 > x4 > x3 > x1, y2 > y4 > y3 > y1 if(!flag_x42 && flag_x41 && !flag_x32 && flag_x31 && !flag_y42 && flag_y41 && !flag_y32 && flag_y31) { a = x4 - x3; b = y4 - y3; S = a * b; } //x2 > x4 > x1 > x3, y2 > y4 > y3 > y1 if(!flag_x42 && flag_x41 && !flag_x32 && !flag_x31 && !flag_y42 && flag_y41 && !flag_y32 && flag_y31) { a = x4 - x1; b = y4 - y3; S = a * b; } //x2 > x4 > x3 > x1, y2 > y4 > y1 > y3 if(!flag_x42 && flag_x41 && !flag_x32 && flag_x31 && !flag_y42 && flag_y41 && !flag_y32 && !flag_y31) { a = x4 - x3; b = y4 - y1; S = a * b; } //x2 > x4 > x1 > x3, y2 > y4 > y1 > y3 if(!flag_x42 && flag_x41 && !flag_x32 && !flag_x31 && !flag_y42 && flag_y41 && !flag_y32 && !flag_y31) { a = x4 - x3; b = y4 - y3; S = a * b; } return S; }
- 1
信息
- ID
- 3048
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者