您的位置:首页 > 其它

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

2015-07-20 19:14 465 查看
传送门: 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

2
4
3 0 3 3
4 0 4 3
2 1 5 1
2 2 5 2
4
3 0 3 3
4 0 4 3
2 1 5 1
2 2 -5 2

 

Sample Output

Case #1:
1
Case #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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息