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 ...
随机推荐
- webservice 介绍
Web service 即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术. l 采用标准SOAP(Simple Object Access Protocol) 协议 ...
- 3、java内存模型特点
java内存模型是围绕着在并发过程中如何处理原子性,可见性跟有序性这三个问题来建立的.先看一下这三个特性: 1.原子性 由java内存模型来直接保证的原子性变量操作就是上文2中提到的8种基本操作,我们 ...
- 【数据结构】最小生成树之prim算法和kruskal算法
在日常生活中解决问题经常需要考虑最优的问题,而最小生成树就是其中的一种.看了很多博客,先总结如下,只需要您20分钟的时间,就能完全理解. 比如:有四个村庄要修四条路,让村子能两两联系起来,这时就有最优 ...
- 使用 Git 管理源代码(转)
什么是 Git? 非常简单地说,Git 是 Linus Torvalds 最近实现的源代码管理软件.正如所提供的文档中说的一样,“Git 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集 ...
- python移动多个子文件中的文件到一个文件夹
import os import os.path import shutil def listDir(dirTemp): if None == dirTemp: return global nameL ...
- AtCoder Grand Contest 023 E - Inversions
Description 给出长度为 \(n\) 序列 \(A_i\),求出所有长度为 \(n\) 的排列 \(P\),满足 \(P_i<=A_i\),求所有满足条件的 \(P\) 的逆序对数之和 ...
- 从数据库中导出数据到.csv文件
考虑到csv文件比xls文件格式容易控制,所以在这次导出中用的是.csv格式. protected function exportInfo($arr, &$err){ $nameInfo = ...
- winform代码生成器(二)
代码下载 地址 http://pan.baidu.com/s/1nuZjyat 接着说 上文继续说,这次我们要生成主从表. 此方用到了第三方的 控件 DevExpress 的Gridview .大家可 ...
- .net生成cookie,读取cookie,创建特性
1.登录或注册成功时生成票据和cookie 注释:__JZY_Common_User_Login_Cookie__:就是为了判断当前登录人(例如:管理员和普通用户,可以定义两个常量,可有可无) 2.读 ...
- 写C#代码时用到的中文简体字 、繁体字 对应的转化 (收藏吧)
简体字 下面有与之对应的繁体字 private const String Jian = "啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆疤巴拔跋靶 ...