任意门:http://acm.hdu.edu.cn/showproblem.php?pid=5258

数长方形

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 303    Accepted Submission(s): 159

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
 

解题思路:

坐标值很大,但是木棍数很少,离散化。

暴力:

记录每一根横放的棍子有多少个相同的覆盖的点。

然后遍历枚举横放的棍子的数目,查询有多少对相同的点。也就是这些横放的棍子有多少对相同的竖放的棍子,总数 C(cnt, 2) = cnt * (cnt - 1)/ 2  就是当前枚举情况可以组成的长方形数目。

注意:

一、初始化,所有数据结构。

二、每一根棍子粗存的 x y 要按照升序的顺序。

AC code:

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
#include <vector>
#define INF ox3f3f3f3f
#define LL long long
using namespace std;
const int MAXN = ;
struct date
{
int x1, y1, x2, y2;
}node[MAXN<<];
int mmp[MAXN][MAXN];
vector<int> addd[MAXN];
vector<int> len_X;
vector<int> len_Y;
map<int, int> HX;
map<int, int> HY;
int N; void init()
{
memset(node, , sizeof(node));
memset(mmp, , sizeof(mmp));
len_X.clear();
len_Y.clear();
HX.clear();
HY.clear();
for(int i = ; i < MAXN; i++) addd[i].clear();
}
int main()
{
int T_case;
scanf("%d", &T_case);
for(int cas = ; cas <= T_case; cas++){
init();
scanf("%d", &N);
for(int i = ; i < N; i++){
scanf("%d%d%d%d", &node[i].x1, &node[i].y1, &node[i].x2, &node[i].y2); ///离散化
if(node[i].x1 > node[i].x2) swap(node[i].x1, node[i].x2);
if(node[i].y1 > node[i].y2) swap(node[i].y1, node[i].y2);
len_X.push_back(node[i].x1), len_X.push_back(node[i].x2);
len_Y.push_back(node[i].y1), len_Y.push_back(node[i].y2);
}
sort(len_X.begin(), len_X.end());
sort(len_Y.begin(), len_Y.end());
len_X.erase(unique(len_X.begin(), len_X.end()), len_X.end());
len_Y.erase(unique(len_Y.begin(), len_Y.end()), len_Y.end());
for(int i = ; i < len_X.size(); i++) HX[len_X[i]] = i;
for(int i = ; i < len_Y.size(); i++) HY[len_Y[i]] = i; for(int i = ; i < N; i++){
node[i].x1 = HX[node[i].x1], node[i].y1 = HY[node[i].y1];
node[i].x2 = HX[node[i].x2], node[i].y2 = HY[node[i].y2];
} for(int i = ; i < N; i++){ //横放的木条
if(node[i].x1 == node[i].x2){
for(int j = node[i].y1; j <= node[i].y2; j++)
mmp[node[i].x1][j] = i+;
}
}
for(int i = ; i < N; i++){ //竖放的木条
if(node[i].y1 == node[i].y2){
for(int j = node[i].x1; j <= node[i].x2; j++){
if(mmp[j][node[i].y1] != ){
addd[mmp[j][node[i].y1]].push_back(i+);
}
}
}
}
LL ans = ;
for(int i = ; i <= N; i++){
for(int j = i+; j <= N; j++){
int cnt = ;
for(int k = ; k < addd[i].size(); k++){
for(int m = ; m < addd[j].size(); m++){
if(addd[i][k] == addd[j][m]){
cnt++;
break;
}
}
}
ans+=cnt*(cnt-)/;
}
}
printf("Case #%d:\n", cas);
printf("%lld\n", ans);
}
return ;
}

HDU 5258 数长方形【离散化+暴力】的更多相关文章

  1. hdu 5258 数长方形 离散化

    数长方形 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5258 Des ...

  2. 暴力枚举-数长方形(hdu5258)

    数长方形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

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

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

  4. HDU 5862 Counting Intersections(离散化+树状数组)

    HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...

  5. hdu 3436 splay树+离散化*

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  6. 【BZOJ1201】[HNOI2005]数三角形(暴力)

    [BZOJ1201][HNOI2005]数三角形(暴力) 题面 BZOJ 洛谷 题解 预处理每个点向四个方向可以拓展的最大长度,然后钦定一个点作为三角形的某个顶点,暴力枚举三角形长度,检查这样一个三角 ...

  7. HDU 2920 分块底数优化 暴力

    其实和昨天写的那道水题是一样的,注意爆LL $1<=n,k<=1e9$,$\sum\limits_{i=1}^{n}(k \mod i) = nk - \sum\limits_{i=1}^ ...

  8. HDU 2601An easy problem-素数的运用,暴力求解

    id=17433" target="_blank" style="color:blue; text-decoration:none">An ea ...

  9. HDU 5925 Coconuts 【离散化+BFS】 (2016CCPC东北地区大学生程序设计竞赛)

    Coconuts Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

随机推荐

  1. 2019.03.28 读书笔记 关于try catch

    try catch 在不异常的时候不损耗性能,耗损性能的是throw ex,所以在非异常是,不要滥用throw,特别是很多代码习惯:if(age<0) throw new Exception(& ...

  2. webstorm预览时把浏览器地址localhost改成IP

    可以通过 File --> Setting,搜索 deployment 点击 + 号 然后输入一个名称,选择:Local or mounted folder,点击 OK 接下来选择你的本地项目路 ...

  3. Oracle broker--详解

    1,简介 01,介绍 Data Guard broker是建立在Data Guard基础上的一个对Data Guard配置,集中管理操作的一个平台.我们再上次DG主备切换的时候会发现特别麻烦,为此br ...

  4. ckeditor和ckfinder

    ckeditor是一个所见即所得的富文本编辑器,用来代替drupal自带的编辑器. 但是从drupal.com下载的ckeditor模块本身没有实现功能,它指向了由cdn.ckeditor.com所提 ...

  5. rockmongo配置文件config.php

    使用编辑器(比如notepad或者VI/VIM命令)打开RockMongo安装目录下的config.php,所有的配置都在这里. 认证 mongo_auth 和control_auth 在开始使用Ro ...

  6. WPF中嵌入Skyline提供的COM组件填坑

    网上有很多关于在WPF中使用的Skyline提供的COM组件的教程,但大都雷同一律,其中很多的细节均为涉及,本文意在在其原基础上进行一些细节的补充. 工具:Visual Studio 2017 1.  ...

  7. django 将表数据通过API展示到页面上(转)

    需求: 我在learn这个app下创建了两张表,其中一个表为user,我希望通过API,在页面是展示这些数据,当用户访问指定的url时,将表中所有对象展示到页面上. 先看learn/models.py ...

  8. Investigating issues with Unmanaged Memory. First steps. (转载)

    原文:http://kate-butenko.blogspot.tw/2012/07/investigating-issues-with-unmanaged.html I want to write ...

  9. 简单shell实现

    http://blog.csdn.net/lishuhuakai/article/details/11928055 #include <stdio.h> #include <unis ...

  10. js正则验证表达式

    //上传文件大小验证 $.fn.checkFileTypeAndSize = function (options) { //默认设置 var defaults = { allowedExtension ...