HDU 5258 数长方形【离散化+暴力】
任意门: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
为了简化题目,一个木棒的端点不会在另一个木棒上,也就是说,木棒的端点不会在长方形上。
每组数据中,第一行是n,代表有多少个木棒,n不会超过25。接下来n行,每行4个整数x1,y1,x2,y2,代表木棒的坐标,绝对值不超过1000。
所有的木棒都是横竖摆放的,也就是说x1=x2或者y1=y2,没有长为0的木棒。
Case #i:
然后输出一个整数,代表有多少个长方形。
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
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 数长方形【离散化+暴力】的更多相关文章
- hdu 5258 数长方形 离散化
数长方形 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5258 Des ...
- 暴力枚举-数长方形(hdu5258)
数长方形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Project Euler 85 :Counting rectangles 数长方形
Counting rectangles By counting carefully it can be seen that a rectangular grid measuring 3 by 2 co ...
- HDU 5862 Counting Intersections(离散化+树状数组)
HDU 5862 Counting Intersections(离散化+树状数组) 题目链接http://acm.split.hdu.edu.cn/showproblem.php?pid=5862 D ...
- hdu 3436 splay树+离散化*
Queue-jumpers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- 【BZOJ1201】[HNOI2005]数三角形(暴力)
[BZOJ1201][HNOI2005]数三角形(暴力) 题面 BZOJ 洛谷 题解 预处理每个点向四个方向可以拓展的最大长度,然后钦定一个点作为三角形的某个顶点,暴力枚举三角形长度,检查这样一个三角 ...
- HDU 2920 分块底数优化 暴力
其实和昨天写的那道水题是一样的,注意爆LL $1<=n,k<=1e9$,$\sum\limits_{i=1}^{n}(k \mod i) = nk - \sum\limits_{i=1}^ ...
- HDU 2601An easy problem-素数的运用,暴力求解
id=17433" target="_blank" style="color:blue; text-decoration:none">An ea ...
- HDU 5925 Coconuts 【离散化+BFS】 (2016CCPC东北地区大学生程序设计竞赛)
Coconuts Time Limit: 9000/4500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
随机推荐
- MongoChef
简介 开源且免费,有商业版 可自动化生成查询语句 使用 最下面的 _id 是自动生成的,手动指定 { .0, "_id" : ObjectId("58 ...
- 设置ibus为默认输入法
/etc/profile 文件中编辑 export INPUT_METHOD="ibus"
- FZU 1884——排火车——————【栈的模拟】
排火车 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status P ...
- bzoj 4574: [Zjoi2016]线段树
Description 小Yuuka遇到了一个题目:有一个序列a_1,a_2,?,a_n,q次操作,每次把一个区间内的数改成区间内的最大值,问 最后每个数是多少.小Yuuka很快地就使用了线段树解决了 ...
- 【Elasticsearch】深入Elasticsearch集群
7.1 节点发现启动Elasticsearch的时候,该节点会寻找有相同集群名字且课件的主节点,如果有加入,没有自己成为主节点,负责发现的模块两个目的 选出主节点以及发现集群的新节点7.1.1发现的类 ...
- 深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregation Principle). 英文原文:htt ...
- Windows无法启动MySQL服务,错误1067
问题:mysql服务启动异常 找出原因 检查D:\mysql-5.6.20-winx64\data目录下client-02.err文件的错误信息(以err为后缀名的文件是mysql的日志文件) 修改配 ...
- 关于JAVA中Byte数据类型二进制赋值运算报错问题
自从JDK7更新之后,新增了二进制变量的表示,支持将整数类型用二进制来表示,用0b开头: 例如: byte b= (byte) 0b1000_0001; short s = (short) 0b100 ...
- (五)html部分标签元素补充
html标签元素十分的多,一次性掌握全部,那是不可能的,在后续的学习中,会不断补充标签元素... 1.行元素和块元素 行标签元素即是标签元素根据内容大小进行自适应,而不是占据一整行. 如<spa ...
- 01常用<meta>总结
meta标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的,它可以用于浏览器(显示内容/重新加载页面),搜索引擎(关键字),或者其他web服务. 一.页面设置 <!- ...