题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4456

题目:


N*N的网格,M个询问

p=2时输出到(x,y)的曼哈顿距离小于等于z的点对应的值之和

解题思路:


(1)到A(x,y)的曼哈顿距离小于等于z的点分布在以A为中心,中垂线的一半=z的菱形上(菱形的四个边都相同),把曼哈顿忽略转化为切比雪夫距离,到A(x,y)的曼哈顿距离小于等于z的点分布在以A'(A'为转为后的坐标)为中心,边长2*z的正方形内:(x,y) --->(x+y, x-y+N),且转换后的网格相当于原来的4倍左右,但其实需要离散的点并没有那么多,网上的题解都是取了400万

(2)找到这个正方形的左上角和右下角并计算这个区间内的点的值的和(二维树状数组解决),相当于二维树状数组的单点更新和区间查询,注意不要越界

(3)N最大为100000,点太多了,需要离散化,并且只离散化有用的点,先对M个询问给出的所有的点进行离散化,并且按照二维树状数组的方式进行离散化,因为只有用二维树状数组更新和求sum值的那些点才有用,才需要离散化

12年杭州区域赛的金牌题好像是,@(・●・)@溜了溜了

ac代码:


#include <bits/stdc++.h>using namespace std;
const int maxn = 4000005;//神奇的400万,可能数据很水,而且好像也离散不出来那么多数
const int maxm = 80005;#define lowbit(x) ((x)&(-x))
int N, M, W, E, H[maxn+5], fenw[maxn + 5];
int O[maxm], X[maxm], Y[maxm], Z[maxm];inline int find (int x) {return lower_bound(H + 1, H + E, x) - H;
}void hashPoint (int x, int y)
{for (int i = x; i <= W; i += lowbit(i)){for (int j = y; j <= W; j += lowbit(j))H[E++] = i * W + j;}
}void add(int x, int y, int d)
{for (int i = x; i <= W; i += lowbit(i)){for (int j = y; j <= W; j += lowbit(j)){int pos = find(i * W + j);fenw[pos] += d;}}
}int sum (int x, int y)
{int ret = 0;for (int i = x; i; i -= lowbit(i)){for (int j = y; j; j -= lowbit(j)){int pos = find(i * W + j);if (H[pos] == i * W + j) //可能没有找到这个值ret += fenw[pos];}}return ret;
}void init ()
{E = 1;W = 2 * N;scanf("%d", &M);memset(fenw, 0, sizeof(fenw));for (int i = 1; i <= M; i++){scanf("%d%d%d%d", &O[i], &X[i], &Y[i], &Z[i]);int x = X[i] + Y[i];int y = X[i] - Y[i] + N;if (O[i] == 1)hashPoint(x, y);}sort(H + 1, H + E);E = unique(H + 1, H + E) - H;
}void solve() {for (int i = 1; i <= M; i++){int x = X[i] + Y[i];int y = X[i] - Y[i] + N;if (O[i] == 1)add(x, y, Z[i]);else{int a = max(1, x - Z[i]);int b = max(1, y - Z[i]);int c = min(W, x + Z[i]);int d = min(W, y + Z[i]);printf("%d\n", sum(c, d) - sum(c, b-1) - sum(a-1, d) + sum(a-1, b-1));}}
}int main ()
{//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);while (scanf("%d", &N) == 1 && N){init();solve();}return 0;
}

【HDU4456】Crowd(曼哈顿距离转切比雪夫距离+二维坐标hash离散化+二维树状数组)相关推荐

  1. 【计几】曼哈顿距离与切比雪夫距离

    讲解链接: 距离 OI Wiki 曼哈顿距离与切比雪夫距离:为何要相互转化 我们设 dM(A,B)d_M(A,B)dM​(A,B) 为点 AAA 和点 BBB 的曼哈顿距离, dQ(A,B)d_Q(A ...

  2. 什么是范数,及其对应的 “曼哈顿距离“、“欧式距离“、“闵氏距离“、“切比雪夫距离“

    什么是范数,及其对应的 "曼哈顿距离"."欧式距离"."闵氏距离"."切比雪夫距离" 一.什么是范数 二.欧式距离(对应 ...

  3. 曼哈顿距离和切比雪夫距离转换

    设平面空间内存在两点,它们的坐标为(x1,y1) (x2,y2) 曼哈顿距离 dis=|x1−x2|+|y1−y2|,即两点横纵坐标差之和. 切比雪夫距离 dis=max(|x1−x2|,|y1−y2 ...

  4. 曼哈顿距离与切比雪夫距离及其相互转化

    文章目录 曼哈顿距离与切比雪夫距离及其相互转化 1.算法分析 1.1 曼哈顿距离 1.2 切比雪夫距离 1.3 两者之间的关系 1.4 用处 2.典型例题 曼哈顿距离与切比雪夫距离及其相互转化 1.算 ...

  5. 三维马氏距离_各种距离(欧氏距离、曼哈顿距离、切比雪夫距离、马氏距离等)...

    引用:http://blog.csdn.net/shiwei408/article/details/7602324 在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurem ...

  6. 曼哈顿距离和切比雪夫距离

    转载 https://www.cnblogs.com/zwfymqz/p/8253530.html 本文只讨论二维空间中的曼哈顿距离与切比雪夫距离 曼哈顿距离 定义 设平面空间内存在两点,它们的坐标为 ...

  7. 曼哈顿距离与切比雪夫距离的互化

    \(\\\) 曼哈顿距离 对于两个点\((x_1,y_1),(x_2,y_2)\),定义他们的曼哈顿距离为\(|x_1-x_2|+|y_1-y_2|\),即两坐标轴分别讨论差值再求和. 对于曼哈顿距离 ...

  8. K邻近算法概述、欧式距离、Scikit-learn使用 、kNN邻近算法距离度量、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化欧氏距离、余弦距离、汉明距离、杰卡德距离、马氏距离

    一.K-邻近算法概述 K邻近算(K Nearest Neighbor算法,KNN算法):如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别 ...

  9. 曼哈顿距离和切比雪夫距离链接

    存一下链接慢慢看 曼哈顿距离和切比雪夫距离 这个更清晰一些: 关于曼哈顿距离和切比雪夫距离 NN中常用的距离计算公式:欧式距离.曼哈顿距离.马氏距离.余弦.汉明距离

  10. 曼哈顿距离与切比雪夫距离的转化及prufer序列

    目录 曼哈顿距离与切比雪夫距离的相互转化 prufer序列 1. 曼哈顿距离 与 切比雪夫距离 的相互转化 曼哈顿距离 |x1−x2|+|y1−y2|=max(x1−x2+y1−y2,x1−x2−y1 ...

最新文章

  1. List集合的三个实现类比较
  2. 树莓派教程之树莓派系统镜像刷入和远程登陆(1)
  3. C++中struct和class关键字的区别
  4. javascript 复制功能 兼容所有浏览器的解决方案
  5. es6删除数组某一项_精学手撕系列——数组扁平化
  6. Struts2增删改查 myeclipse开发文档加项目源码及eclipse开发项目源码
  7. JavaScript基础和Web APIs两个阶段的关联性(1)
  8. 【易实战】Spring Cloud Greenwich Hystrix:服务容错保护
  9. SpringCloud-Alibaba之Nacos,Java集合面试题及答案
  10. 《人工智能狂潮》读后感——什么是人工智能?(一)
  11. 六龙争霸3D国战怎么玩 国战玩法详解
  12. 观察者模式和模拟wow插件的例子
  13. neo4j算法插件-GDS安装
  14. 在堆区开辟内存(动态内存的开辟)
  15. 工程流体力学笔记暂记43 (收缩喷管中的流动)
  16. java word文本框_Java 读取Word文本框中的文本、图片、表格
  17. 图解LeetCode——854. 相似度为 K 的字符串(难度:困难)
  18. python矩阵和向量乘积_矩阵与向量的乘积
  19. 以下关于python函数说法错误的是def_以下关于Python函数的描述中,错误的是()
  20. 同指数幂相减公式_指数幂的指数幂的运算法则

热门文章

  1. BizTalk Server 2010 - 使用 WCF Service [ 中篇 ]
  2. 《MySQL必知必会》学习笔记——第三章(了解数据库和表)
  3. 表格求和和计算机不一致6,(电子行业企业管理)计算机电子表格公式应用常见错误及处理(6页)-原创力文档...
  4. php paypal ipn返回验证,Paypal IPN检测退款,PHP
  5. mysql 行显示 g_MySQL行(记录)详细操作
  6. Session 工作原理
  7. Linux 小知识翻译 - 目录 (完结)
  8. Mac OS 电信3G上网设置
  9. 在ASP.net MVC中利用ajax配合razor进行局部加载
  10. poj1273最大流初破