没参加的2015百度之星——数矩形

来源:互联网 发布:三挫仑在淘宝上叫什么 编辑:程序博客网 时间:2024/06/03 19:39

传送门: http://acm.hdu.edu.cn/showproblem.php?pid=5258

Problem Description
小度熊喜欢玩木棒。一天他在玩木棒的时候,发现一些木棒会形成长方形。小度熊可能是处女座吧,他只会将木棒横竖摆放,这样会形成很多长方形。现在给你一些横竖摆放的木棒,请你帮小度熊数一数形成了多少个长方形。

为了简化题目,一个木棒的端点不会在另一个木棒上,也就是说,木棒的端点不会在长方形上。
 

Input
第一行一个整数T,表示T组数据,不超过100组。

每组数据中,第一行是n,代表有多少个木棒,n不会超过25。接下来n行,每行4个整数x1,y1,x2,y2,代表木棒的坐标,绝对值不超过1000。

所有的木棒都是横竖摆放的,也就是说x1=x2或者y1=y2,没有长为0的木棒。
 

Output
对于每组测试数据,先输出一行

Case #i:

然后输出一个整数,代表有多少个长方形。
 

Sample Input
243 0 3 34 0 4 32 1 5 12 2 5 243 0 3 34 0 4 32 1 5 12 2 -5 2
 

Sample Output
Case #1:1Case #2:0
 

Source
2015年百度之星程序设计大赛 - 复赛

暴力枚举,注意判断方式!

#include<iostream>#include<cstdio>#include<vector>using namespace std;struct node{    int x1,y1,x2,y2;    void in(){        cin>>x1>>y1>>x2>>y2;        if(x1>x2)swap(x1,x2);        if(y1>y2)swap(y1,y2);    }};vector <node> px;vector <node> py;bool jx(int i,int j){    if(px[i].x1==px[j].x1)return false;    if(px[i].y1>=px[j].y2-2)return false;    if(px[i].y2<=px[j].y1+2)return false;    return true;}bool jy(int i,int j){    if(py[i].y1==py[j].y1)return false;    if(py[i].x1>=py[j].x2-2)return false;    if(py[i].x2<=py[j].x1+2)return false;    return true;}bool judge(node a,node b,node c,node d){    int x1=max(c.x1,d.x1);    int x2=min(c.x2,d.x2);    int y1=max(a.y1,b.y1);    int y2=min(a.y2,b.y2);    if(x1<a.x1 && a.x2<x2 && x1<b.x1 && b.x2<x2)        if(y1<c.y1 && c.y2<y2 && y1<d.y1 && d.y2<y2 )            return true;    return false;}int main(){    int T;cin>>T;    int CA=1;    while(T--){        int n;cin>>n;        px.clear();        py.clear();        for(int i=1;i<=n;i++){            node tmp;tmp.in();            if(tmp.x1==tmp.x2)px.push_back(tmp);            else py.push_back(tmp);        }        cout<<"Case #"<<CA++<<":"<<endl;        int lenx=px.size();        int leny=py.size();        int ans=0;        for(int i=0;i<lenx;i++){            for(int j=i+1;j<lenx;j++){                if(jx(i,j)==false)continue;                for(int k=0;k<leny;k++){                    for(int t=k+1;t<leny;t++){                        if(jy(k,t)==false)continue;                        bool ok=judge(px[i],px[j],py[k],py[t]);                        if(ok)ans++;                    }                }            }        }        cout<<ans<<endl;    }    return 0;}



0 0
原创粉丝点击