题目地址


易错点:

  • 要用long long存储.
  • 读入的吸引半径需要乘方(因为通过(x-x0)*(x-x0)-(y-y0)*(y-y0)获取的值本身就是乘方的).
  • (分块)右端点需要用min(n,i+w-1)获取.

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int MAXN=3e5;
struct Node{ll dis,r;int m,p;
}a[MAXN];
bool cmp_dis(Node a,Node b){return a.dis<b.dis;
}
bool cmp_m(Node a,Node b){return a.m<b.m;
}
int q[MAXN],l,r;
int L[MAXN],R[MAXN],cnt=0;
ll D[MAXN];
bool vis[MAXN];
int main(){ll x0,y0;int n;scanf("%lld%lld%d%lld%d",&x0,&y0,&a[0].p,&a[0].r,&n);a[0].r*=a[0].r;for(int i=1;i<=n;i++){int x,y;scanf("%d%d%d%d%lld",&x,&y,&a[i].m,&a[i].p,&a[i].r);a[i].dis=(x-x0)*(x-x0)+(y-y0)*(y-y0);a[i].r*=a[i].r;}sort(a+1,a+n+1,cmp_dis);//先按距离排序int w=sqrt(n);for(int i=1;i<=n;i+=w){L[++cnt]=i,R[cnt]=min(n,i+w-1);D[cnt]=a[R[cnt]].dis;sort(a+L[cnt],a+R[cnt]+1,cmp_m);//+1} l=r=1,q[1]=0;while(l<=r){ll rad=a[q[l]].r;int p=a[q[l]].p;l++;for(int i=1;i<=cnt;i++){if(D[i]>rad){for(int j=L[i];j<=R[i];j++){if(!vis[j]&&a[j].dis<=rad&&a[j].m<=p){vis[j]=1;q[++r]=j;}}break;}while(L[i]<=R[i]&&a[L[i]].m<=p){if(!vis[L[i]])q[++r]=L[i];L[i]++;}}}printf("%d\n",r-1);return 0;
}

AW250 磁力块(分块)相关推荐

  1. Contest Hunter #46 T1 磁力块 [分块]

    描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐标,m是磁石的质量,p是磁力,r是吸引半径.若磁石A与磁石B的距离不大于磁石A ...

  2. 【题解】CH#46A 磁力块 分块+排序+队列

    题目链接 题目描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐标,m是磁石的质量,p是磁力,r是吸引半径.若磁石A与磁石B的距 ...

  3. 『磁力块 bfs 分块』

    磁力块 Description 在一片广袤无垠的原野上,散落着N 块磁石.每个磁石的性质可以用一个五元组 (x,y,m,p,r)描述,其中x,y 表示其坐标,m 是磁石的质量,p 是磁力,r 是吸引半 ...

  4. #广搜,分块#jzoj 3974 CH #46A 磁力块

    题目 主人公一开始在一个位置用磁铁吸引其它磁铁,当磁铁的质量≤\leq≤磁力就会吸到主人公手里,不在主人公手里的磁铁不会互相吸引,主人公可以更换磁铁,但是只能原地不动,问主人公最多能吸到多少块磁铁 分 ...

  5. 蓝书(算法竞赛进阶指南)刷题记录——CH#46A BZOJ3276 磁力块(bfs+分块)

    题目:CH#46A. 题目大意:有一个元素a0=(x0,y0,m0,p0,r0)a_0=(x_0,y_0,m_0,p_0,r_0)a0​=(x0​,y0​,m0​,p0​,r0​)和其它nnn个元素a ...

  6. NC 51114. 磁力块

    链接 https://ac.nowcoder.com/acm/problem/51114 题意 有 NNN 块磁石,每个磁石的性质可以用一个五元组 (x,y,m,p,r)(x,y,m,p,r)(x,y ...

  7. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

  8. 分块专题整理(分块+莫队)

    分块 1.什么是分块 2.分块的作用与优缺点 3.分块的一般步骤 4.注意事项 5.拓展:莫队算法 1.什么是莫队 2.莫队的一般步骤 3.注意事项 6.例题 1.什么是分块 说白了,分块就是优化的暴 ...

  9. 线性结构 —— 分块算法 —— 分块九讲

    模型1:区间加法,单点询问 问题:给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值. 对每个块设置一个加法标记,记录这个块中元素一共加了多少,每次操作对整块直接 O(1) 标记, ...

最新文章

  1. 分享一个电视节目API接口PHP调用代码
  2. Python中使用ncmbot玩转网易云音乐
  3. 算法入门开灯问题,新做法
  4. Android - 网络基础
  5. CF1572B. Xor of 3
  6. 前端学习(120):css精灵和好处
  7. java反射 动态调用_java反射拼接方法名动态执行方法
  8. 技术优点_波纹管内衬管制造技术及优点
  9. 超56万5G用户重返4G:用户难以接受这两点
  10. 【软件工程】第一章 软件工程概述 考试重点 复习记录
  11. 宇枫资本投资理财的几大定律
  12. 登陆+注册(vue+elementUI)
  13. 基于Citrix的云桌面远程连接Mac机
  14. 2022-2027年中国婴幼儿米粉市场竞争态势及行业投资前景预测报告
  15. 极路由 刷linux,极路由 刷uboot + openwrt , 以及连接校园网(netkeeper)
  16. 桌面不显示我的计算机显示器,电脑桌面显示怎么分屏显示不出来怎么办
  17. CentOS下用命令查看IP地址
  18. pyhton获取 中国各个省份/直辖市拥有的上市公司数目
  19. 网店买书如何避免被骗?
  20. 培育百万开发者,Serverless的主战场

热门文章

  1. MaxDOS v5.8s 说明文件
  2. Apsara Clouder大数据专项技能认证:基于MaxCompute的热门话题分析
  3. 智能化运维管理平台,如何提高运维工作效率
  4. 面试连环炮之Integer和int
  5. 使用lxml解析HTML数据
  6. ubuntu16.04搭建nfs服务端
  7. 胸大肌(07):拉力器夹胸
  8. 围捕神经猫android版[开源]
  9. mysql -- 大小写配置
  10. sql server和mysql 分页_基于Sql server数据库的四种分页方式总结