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

The output for each test case is the number of all different rectangles in the figure described by the test case. The output for each test case must be written on a separate line.

Sample Input

2
6
0 0 0 20
0 10 25 10
20 10 20 20
0 0 10 0
10 0 10 20
0 20 20 20
3
5 0 5 20
15 5 15 25
0 10 25 10

Sample Output

5
0

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 (水平竖直线段组成的矩形个数,暴力)的更多相关文章

  1. Counting Rectangles

    Counting Rectangles Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1043 Accepted: 546 De ...

  2. Project Euler 85 :Counting rectangles 数长方形

    Counting rectangles By counting carefully it can be seen that a rectangular grid measuring 3 by 2 co ...

  3. UVA - 10574 Counting Rectangles

    Description Problem H Counting Rectangles Input: Standard Input Output:Standard Output Time Limit: 3 ...

  4. UVA 10574 - Counting Rectangles(枚举+计数)

    10574 - Counting Rectangles 题目链接 题意:给定一些点,求可以成几个边平行于坐标轴的矩形 思路:先把点按x排序,再按y排序.然后用O(n^2)的方法找出每条垂直x轴的边,保 ...

  5. 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 ...

  6. Codeforces 372 B. Counting Rectangles is Fun

    $ >Codeforces \space 372 B.  Counting Rectangles is Fun<$ 题目大意 : 给出一个 \(n \times m\) 的 \(01\) ...

  7. Codeforces 372B Counting Rectangles is Fun:dp套dp

    题目链接:http://codeforces.com/problemset/problem/372/B 题意: 给你一个n*m的01矩阵(1 <= n,m <= 40). 然后有t组询问( ...

  8. [ACM_模拟][ACM_暴力] Lazier Salesgirl [暴力 懒销售睡觉]

    Description Kochiya Sanae is a lazy girl who makes and sells bread. She is an expert at bread making ...

  9. ZOJ People Counting

    第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ  3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...

随机推荐

  1. mysql 更改自动增长字段值的重新设定

    今天在服务器上MYSQL库里的一个表插入数据,主键id是auto_increment自动增长类型的.发现插入的值从2247734开始,而实际上id的最大值才22722,不明原因. 删除了新增的,opt ...

  2. jqeury datatable

    1.自定义列信息    "aoColumnDefs":[                               {                               ...

  3. 深入理解js——prototype原型

    之前(深入理解js--一切皆是对象)中说道,函数也是一种对象.它也是属性的集合,你也可以对函数进行自定义属性.而JavaScript默认的给了函数一个属性--prototype(原型).每个函数都有一 ...

  4. MFC 实现字符串的移动

    在视类添加一个WM_KeyDown,然后实现函数写上 switch(nChar) {.. CRect rc; GetClientRect(&rc);   int nWidth = rc.Wid ...

  5. servlet3.0,web.xml的metadata-complete的作用

    metadata-complete是servlet3.0规范中的新增的属性,该属性接受两个属性值,true或false.当该属性值为true时,该web应用将不会加载Annotation配置的web组 ...

  6. System.IO中的File、FileInfo、Directory与DirectoryInfo类(实例讲解)

    一.建立的文件夹(对这些文件进行以上四个类的操作): 父目录: 父目录的子目录以及父目录下的文件: 子目录下的文件: 二.效果图 三.代码实现 using System; using System.I ...

  7. SQL Server Profiler使用方法

    一.SQL Server Profiler使用方法 1.单击开始--程序--Microsoft SQL Server 2005--性能工具--SQL Server Profiler,如下图:   2. ...

  8. servlet二

    ServletConfig讲解 1.1.配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始 ...

  9. NVelocity 表格行奇偶样式变换

    #foreach($test in $tests) #even <tr class="Test1"> #odd <tr class="Test2&quo ...

  10. WPF 设置透明度和圆形图片

    1 设置效果为