题目传送门

在一片广袤无垠的原野上,散落着N块磁石。

每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐标,m是磁石的质量,p是磁力,r是吸引半径。

若磁石A与磁石B的距离不大于磁石A的吸引半径,并且磁石B的质量不大于磁石A的磁力,那么A可以吸引B。小取酒带着一块自己的磁石L来到了这片原野的(x0,y0)处,我们可以视磁石L的坐标为(x0,y0)。小取酒手持磁石L并保持原地不动,所有可以被L吸引的磁石将会被吸引过来。

在每个时刻,他可以选择更换任意一块自己已经获得的磁石(当然也可以是自己最初携带的L磁石)在(x0,y0)处吸引更多的磁石。

小取酒想知道,他最多能获得多少块磁石呢?

输入格式

第一行五个整数x0,y0,pL,rL,N,表示小取酒所在的位置,磁石L磁力、吸引半径和原野上散落磁石的个数。

接下来N行每行五个整数x,y,m,p,r,描述一块磁石的性质。

输出格式

输出一个整数,表示最多可以获得的散落磁石个数(不包含最初携带的磁石L)。

数据范围

\(1≤N≤250000, −10^9≤x,y≤10^9, 1≤m,p,r≤10^9\)

输入样例:

0 0 5 10 5
5 4 7 11 5
-7 1 4 7 8
0 2 13 5 6
2 -3 9 3 4
13 5 1 9 9

输出样例:

3

分析

将磁石按照质量排序,分成t块,然后对于一个磁石一定有一个k,使得前k-1块所有的磁石的质量都小于它的磁力,k+1块之后的磁石质量都比它磁力大,而对块内按照距离排序之后,只需要挨个扫就可以了,扫过的标记、加入队列,调整区间。但对于第k块,因为不是所有的质量都小于当前磁块的磁力,所以要全部扫一遍,直到距离大于磁力半径,该块不能被调整区间

#include <bits/stdc++.h>
using namespace std;
const int N = 250010;
struct node{
int x,y,m,p,r;
double dis;
}a[N];
int x0,y,n;
int L[N],R[N],v[N];
double S(int x){return 1.0*x * x;}
bool cmp(node a,node b){
return a.m < b.m;
}
bool cmp2(node a,node b){
return a.dis < b.dis;
}
int main(){
scanf("%d%d%d%d%d",&x0,&y,&a[0].p,&a[0].r,&n);
for(int i=1;i<=n;i++){
scanf("%d%d%d%d%d",&a[i].x,&a[i].y,&a[i].m,&a[i].p,&a[i].r);
a[i].dis = sqrt(S(a[i].x-x0)+S(a[i].y-y));
}
int t = sqrt(n);
for(int i=1;i<=t;i++){
L[i] = (i-1) * t + 1;
R[i] = i * t;
}
if(R[t] < n){
t ++;L[t] = R[t-1] + 1;R[t] =n;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=t;i++){
sort(a+L[i],a+R[i]+1,cmp2);
}
int res = 0;
queue<int> q;
q.push(0);
while(!q.empty()){
int u = q.front();q.pop();
res++;
int r = a[u].r,p = a[u].p;
bool flag = true;//标记是否为前k-1块
for(int i=1;i<=t;i++){
if(!flag)break;
int j = L[i];
for(;j<=R[i];j++){
if(v[j])continue;
if(p >= a[j].m){
if(r >= a[j].dis){
v[j] = 1;q.push(j);
}else{
break;
}
}else{
flag = false;continue;//是第k块
}
}
if(flag)L[i] = j;//不是第k块就调整左坐标点
}
}
printf("%d\n",res-1);//减去原始的磁石
return 0;
}

AcWing 250 磁力快(分块)的更多相关文章

  1. CH#46 磁力块 分块

    正解:分块+bfs 解题报告: 先放个传送门,然后瞎扯淡下QAQ 突然感觉不停课大概是正确的选择QAQ 大概实在是没有天赋?明明都知道正解是分块甚至还听了下解法感觉理解了,再看一次依然没想到解法,,, ...

  2. CH #46A - 磁力块 - [分块]

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

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

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

  4. bzoj3276磁力 两种要求下的最大值:分块or线段树+拓扑

    进阶指南上的做法是分块的.. 但是线段树搞起来也挺快,将磁石按照距离排序,建立线段树,结点维护区间质量最小值的下标 进行拓扑,每次在可行的范围内在线段树中找到质量最小的下标取出,取出后再将线段树对应的 ...

  5. 『磁力块 bfs 分块』

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

  6. AcWing 199. 余数之和 (除法分块)打卡

    给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值. 例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod ...

  7. AcWing 251. 小Z的袜子| 分块+莫队

    传送门 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿. 终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命. 具体来说,小Z把这N只袜子从 ...

  8. 数列分块入门九题(一):LOJ6277~6279

    Preface 分块,一个神奇的暴力算法.可以把很多\(O(n^2)\)的数据结构题的暴力优化到常数极小的\(O(n\sqrt n)\).当一些毒瘤题无法用线段树,主席树,平衡树,树状数组...... ...

  9. BT中的磁力链接(转)

    注意:磁力链接不是迅雷的,而是BT网络中的一种协议. 磁力链接与种子文件 磁力链接并不是一个新概念,早在2002年,相关的标准草稿就已经制定了.但直到2012年海盗湾为规避版权问题删除了站点上的所有T ...

随机推荐

  1. ICMP协议概述

    • ICMP是三层协议,和IP.ARP.ICMP同属三层    • IP协议中的6是代表上层的TCP协议,17代表UDP协议,1代表同层的ICMP协议    • ICMP协议主要用来探测       ...

  2. python_元组(tuple)

    #tuple(),元组不可以修改,不能对其进行增加或删除操作,元组是有序的 #1.定义 tu_1 = () #定义一个空元组 tu_2 = (1,2,'alex',[3,4],(5,6,7),True ...

  3. 安装sendmail

    yum install -y sendmail yum install -y sendmail-cf 启动 service sendmail start 发送邮件 cat nihao.txt |mai ...

  4. 【Linux】如何查看命令来源于哪个包

    Debian:(Ubuntu等) 先安装apt-file sudo apt-get install -y apt-file apt-file update 查询命令:(已查询ifconfig为例) r ...

  5. MybatisPlus多数据源及事务解决思路

    关于多数据源解决方案 目前在SpringBoot框架基础上多数据源的解决方案大多手动创建多个DataSource,后续方案有三: 继承org.springframework.jdbc.datasour ...

  6. 使用yaml配置文件管理资源

    [root@k8s-master ~]# vim nginx-deployment.yaml apiVersion: apps/v1beta2 kind: Deployment metadata: n ...

  7. cts project的创建修改和删除

    事务码:SPRO_ADMIN进入 项目管理界面,点击工具栏创建项目(F5),弹出对话框,输入项目名称,回车确定. 标题中输入项目的描述.点击保存.如图: 点击图片放大 注:要想此项目在CTS建立请求的 ...

  8. OO第三次总结博客

    规格化设计的发展历史 (因为很难寻找,所以参考了下别的同学的调研结果) 规格化设计与结构化.模块化设计密不可分,伴随着OOP语言的发展,规格化设计思想逐渐形成体系,慢慢完善. 20世纪60年代,程序的 ...

  9. JavaScript中函数的定义!

    JavaScript中函数的定义! 1 自定义函数(命名函数) function fun() {}; 2 函数表达式(匿名函数) var fun = function () {}; 3 利用 new ...

  10. 在vCenter Server中添加ESXi 主机失败的问题

    报错:出现了常规系统错误: Timed out waiting for vpxa to start 报错是这个,我看了下vcenter的版本是6.5,如图右上,这个报错是因为我ESXI主机是6.7的, ...