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 ...
随机推荐
- Django_Xadmin 修改后台
admin组件使用 Django 提供了基于 web页面的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTA ...
- sourceTree免登陆
https://www.cnblogs.com/dereckbu/articles/7659674.html
- pat1013. Battle Over Cities (25)
1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...
- 移动端或APP禁止放大标识
如果手机端或者APP的应用里面,有点击一下屏幕会自己放大,解决办法如下: 在头部添加一条meta标识 <meta name="viewport" content=" ...
- nginx 导致文件上传中途中断 Failed to load resource: net::ERR_CONNECTION_RESET
昨天上传文件出了问题,常常在进度条到一半的时候就终止了.在本地测试的时候倒是没问题,今天早上用花生壳换了另一个域名,在我本地和服务器都测试,却能够上传文件成功.然后就想到了可能是nginx的问题,也在 ...
- 3.storm-starter打包在storm集群上运行
1.使用maven或者其他打包工具将storm-starter打成jar包 2.请将jar包用解压工具打开在根目录下找到defaults.yaml文件并将其删除不然到时会报有multiply defa ...
- SharePoint Tricks
1. 64位IE浏览器无法使用Open with Explorer功能,而且会直接用浏览器去打开office文件(不管是否选择使用客户端打开) 2. 对于 large list or library, ...
- struts1.3.10 和 hibernate 3.3.2 一起加载时 出现javax.servlet.ServletException: java.lang.NoSuchMethodError: antlr.collections.A 错误
struts1.3.10 需要导入一个 antlr-2.7.2.jar 的jar包: hibernate 3.3.2 需要导入一个 antlr-2.7.6.jar 的jar包,这两个包有冲突,所以需要 ...
- 2018年哔哩哔哩bilibili前端开发工程师在线笔试1
##基础编程能力考查(共1题) 给定一个数组,其中有n(1<n<10000)个整数,检查是否能通过修改不多余一个元素就能让数组从小到大排列. 例1: 输入:[4,2,3] 输出:true ...
- IIS10搭建FTP服务
1.首先是基本搭建 http://jingyan.baidu.com/article/0bc808fc408fa91bd585b94f.html 2.计算机—管理----本地用户和组----本地用户- ...