[ACM_暴力][ACM_几何] ZOJ 1426 Counting Rectangles (水平竖直线段组成的矩形个数,暴力)
Description
We are given a figure consisting of only horizontal and vertical line segments. Our goal is to count the number of all different rectangles formed by these segments. As an example, the number of rectangles in the Figures 1 and 2 are 5 and 0 respectively.

There are many intersection points in the figure. An intersection point is a point shared by at least two segments. The input line segments are such that each intersection point comes from the intersection of exactly one horizontal segment and one vertical segment.
Input
The first line of the file contains a single number M, which is the number of test cases in the file (1 <= M <= 10), and the rest of the file consists of the data of the test cases. Each test case begins with a line containing s (1 <= s <= 100), the number of line segments in the figure. It follows by s lines, each containing x and y coordinates of two end points of a segment respectively. The coordinates are integers in the range of 0 to 1000.
Output
Sample Input
Sample Output
The above input file contains two test cases corresponding to Figures 1 and 2 respectively.
题目大意:给一些水平或竖直的线段,求能组成的矩形的个数。
解题思路:因为题目给的只有垂直和水平的线段,且总线段不超过100.所以我们可以暴力。
1、任选两根水平的线段,若无水平线段可选,结束。否则,转2
2、从所有的垂直线段里,找到和这两根水平线段相交的线段,假设有tmp条。转3
3、对于1步选的两条水平线段,因为有tmp跟垂直线段与其相交,根据推算,可以得知,其能组成的矩形就是(tmp - 1)*tmp / 2 个,将其加进总和里即可。转1
#include<iostream>
#include<string.h>
using namespace std;
class Rect{
public:
int x1,y1,x2,y2;
void set(int a,int b,int c,int d){
x1=a,y1=b,x2=c,y2=d;
}
};//线段类
bool ok(Rect &a,Rect &b){
return b.y1<=a.y1 && a.y1<=b.y2 && a.x1<=b.x1 && b.x1<=a.x2;
}//判断线段相交
int M;
int s;
Rect rectH[],rectS[];//水平和竖直线段集
int main(){
cin>>M;
while(M--){
cin>>s;
int H=,S=;
for(int i=;i<s;i++){
int x,y,x1,y1;
cin>>x>>y>>x1>>y1;
if(x==x1){
if(y>y1)rectS[S++].set(x1,y1,x,y);
else rectS[S++].set(x,y,x1,y1);
}else{
if(x>x1)rectH[H++].set(x1,y1,x,y);
else rectH[H++].set(x,y,x1,y1);
}//要注意从上到下,从左到右
} int tot=;
for(int i=;i<H-;i++){
for(int j=i+;j<H;j++){//枚举2条横的,统计满足相交的竖着的线段的条数count
int count=;
for(int k=;k<S;k++){
if(ok(rectH[i],rectS[k]) && ok(rectH[j],rectS[k]))
count++;
}
tot+=(count-)*count/;//计算此情况能组成多少
}
}
cout<<tot<<'\n';
}return ;
}
[ACM_暴力][ACM_几何] ZOJ 1426 Counting Rectangles (水平竖直线段组成的矩形个数,暴力)的更多相关文章
- Counting Rectangles
Counting Rectangles Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1043 Accepted: 546 De ...
- Project Euler 85 :Counting rectangles 数长方形
Counting rectangles By counting carefully it can be seen that a rectangular grid measuring 3 by 2 co ...
- UVA - 10574 Counting Rectangles
Description Problem H Counting Rectangles Input: Standard Input Output:Standard Output Time Limit: 3 ...
- UVA 10574 - Counting Rectangles(枚举+计数)
10574 - Counting Rectangles 题目链接 题意:给定一些点,求可以成几个边平行于坐标轴的矩形 思路:先把点按x排序,再按y排序.然后用O(n^2)的方法找出每条垂直x轴的边,保 ...
- Codeforces Round #219 (Div. 2) D. Counting Rectangles is Fun 四维前缀和
D. Counting Rectangles is Fun time limit per test 4 seconds memory limit per test 256 megabytes inpu ...
- Codeforces 372 B. Counting Rectangles is Fun
$ >Codeforces \space 372 B. Counting Rectangles is Fun<$ 题目大意 : 给出一个 \(n \times m\) 的 \(01\) ...
- Codeforces 372B Counting Rectangles is Fun:dp套dp
题目链接:http://codeforces.com/problemset/problem/372/B 题意: 给你一个n*m的01矩阵(1 <= n,m <= 40). 然后有t组询问( ...
- [ACM_模拟][ACM_暴力] Lazier Salesgirl [暴力 懒销售睡觉]
Description Kochiya Sanae is a lazy girl who makes and sells bread. She is an expert at bread making ...
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
随机推荐
- 8.3 H5学习笔记
隐藏域 <form action="" method="post" enctype="multipart/form-data"> ...
- Cadence UVM基础视频介绍(UVM SV Basics)
Cadence关于UVM的简单介绍,包括UVM的各个方面.有中文和英文两种版本. UVM SV Basics 1 – Introduction UVM SV Basics 2 – DUT Exampl ...
- 《C和指针(Pointer on c)》 学习笔记
转载:http://dsqiu.iteye.com/blog/1687944 首先本文是对参考中三个连接的博客进行的整理,非常感谢三位博主的努力,每次都感叹网友的力量实在太强大了…… 第一章 快速上手 ...
- 如何让我们的VMware虚拟机上网——转载
一.必须检查你的windows系统的VMware DHCP Service 和VMware NAT Service这个两个服务是否启动.如果未启动请启动. 1,在开始windows里面输入servic ...
- 处理BOM
[处理BOM]
- C语课设心得分享(二)
咱们今儿说说IDE的事儿. IDE是「集成开发环境」的意思,比如咱们常用的VC6.0,就是开发C语言所用的IDE的一种.对于IDE的认识,可能有些朋友有点儿模糊,咱们捋一捋,我也会给出一些IDE方面的 ...
- Spring MVC常见的三种URL请求参数的处理
//方法1:@RequestParam //url:/test1?id=123 @RequestMapping(value = "/test1",method = RequestM ...
- DataGridView 控件详细解说
1. DataGridView 控件详细解说:http://blog.csdn.net/qq_24304137/article/details/51068768 2. DataGridView的几个基 ...
- 基于weka的文本分类实现
weka介绍 参见 1)百度百科:http://baike.baidu.com/link?url=V9GKiFxiAoFkaUvPULJ7gK_xoEDnSfUNR1woed0YTmo20Wjo0wY ...
- 记一次IIS Express 之经典模式与集成模式切换
Visual Studio 视图 --> 属性窗口. 或者 选中项目 F4 弹出项目的属性窗口进行切换设置..