A. Square and Rectanglestime limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given n rectangles. The corners of rectangles have integer coordinates and their edges are parallel to the Ox and Oy axes.
The rectangles may touch each other, but they do not overlap (that is, there are no points that belong to the interior of more than one rectangle).
Your task is to determine if the rectangles form a square. In other words, determine if the set of points inside or on the border of at least one rectangle is precisely equal to the set of points inside or on the border of some square.
Input
The first line contains a single integer n (1 ≤ n ≤ 5).
Next n lines contain four integers each, describing a single rectangle: x1, y1, x2, y2(0 ≤ x1 < x2 ≤ 31400, 0 ≤ y1 < y2 ≤ 31400)
— x1 and x2 are x-coordinates
of the left and right edges of the rectangle, and y1 and y2are y-coordinates
of the bottom and top edges of the rectangle.
No two rectangles overlap (that is, there are no points that belong to the interior of more than one rectangle).
Output
In a single line print "YES", if the given rectangles form a square, or "NO"
otherwise.
Sample test(s)input
50 0 2 30 3 3 52 0 5 23 2 5 52 2 3 3
output
YES
input
40 0 2 30 3 3 52 0 5 23 2 5 5
output
NO
這是一道簡單的集合的題目,想不到啊,當時大師給我提示了,下來忘寫了,現在補上,其實就只需要【判斷三點就行了,首先是要保證這些矩形構成的圖形的面積是個完全平方數,這是正方形的首要前提,2是要保證矩形的面積合起來要和外面得大圖形相同,最後就是邊長相等,這樣就保證他是個正方形了。
下面是代碼:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <cmath>using namespace std;const int inf=100000000;struct square{ int lx; int ly; int rx; int ry;}s[10];int main(){ int n; while(scanf("%d",&n)!=EOF){ __int64 area=0;//剛開始時寫的int,貌似出問題了 int mlx=inf,mrx=-inf; int mly=inf,mry=-inf; for(int i=1;i<=n;i++){ scanf("%d%d%d%d",&s[i].lx,&s[i].ly,&s[i].rx,&s[i].ry); mlx=min(mlx,s[i].lx); mrx=max(mrx,s[i].rx); mly=min(mly,s[i].ly); mry=max(mry,s[i].ry); area+=(s[i].rx-s[i].lx)*(s[i].ry-s[i].ly); } __int64 temp=sqrt(area); if(temp*temp!=area){//如果邊長不是個平方數,肯定是 錯的 cout<<"NO"<<endl; } else{ if((mrx-mlx)*(mry-mly)==area&&(mrx-mlx)==(mry-mly)) cout<<"YES"<<endl; else cout<<"NO"<<endl; } } return 0;}