cf MemSQL start[c]up Round 1 A Square and Rectangles

來源:互聯網
上載者:User
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;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.