AW250 磁力块(分块)
题目地址
易错点:
- 和要用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 磁力块(分块)相关推荐
- Contest Hunter #46 T1 磁力块 [分块]
描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐标,m是磁石的质量,p是磁力,r是吸引半径.若磁石A与磁石B的距离不大于磁石A ...
- 【题解】CH#46A 磁力块 分块+排序+队列
题目链接 题目描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐标,m是磁石的质量,p是磁力,r是吸引半径.若磁石A与磁石B的距 ...
- 『磁力块 bfs 分块』
磁力块 Description 在一片广袤无垠的原野上,散落着N 块磁石.每个磁石的性质可以用一个五元组 (x,y,m,p,r)描述,其中x,y 表示其坐标,m 是磁石的质量,p 是磁力,r 是吸引半 ...
- #广搜,分块#jzoj 3974 CH #46A 磁力块
题目 主人公一开始在一个位置用磁铁吸引其它磁铁,当磁铁的质量≤\leq≤磁力就会吸到主人公手里,不在主人公手里的磁铁不会互相吸引,主人公可以更换磁铁,但是只能原地不动,问主人公最多能吸到多少块磁铁 分 ...
- 蓝书(算法竞赛进阶指南)刷题记录——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 ...
- NC 51114. 磁力块
链接 https://ac.nowcoder.com/acm/problem/51114 题意 有 NNN 块磁石,每个磁石的性质可以用一个五元组 (x,y,m,p,r)(x,y,m,p,r)(x,y ...
- OI每周刷题记录——lrllrl
看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...
- 分块专题整理(分块+莫队)
分块 1.什么是分块 2.分块的作用与优缺点 3.分块的一般步骤 4.注意事项 5.拓展:莫队算法 1.什么是莫队 2.莫队的一般步骤 3.注意事项 6.例题 1.什么是分块 说白了,分块就是优化的暴 ...
- 线性结构 —— 分块算法 —— 分块九讲
模型1:区间加法,单点询问 问题:给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值. 对每个块设置一个加法标记,记录这个块中元素一共加了多少,每次操作对整块直接 O(1) 标记, ...
最新文章
- 分享一个电视节目API接口PHP调用代码
- Python中使用ncmbot玩转网易云音乐
- 算法入门开灯问题,新做法
- Android - 网络基础
- CF1572B. Xor of 3
- 前端学习(120):css精灵和好处
- java反射 动态调用_java反射拼接方法名动态执行方法
- 技术优点_波纹管内衬管制造技术及优点
- 超56万5G用户重返4G:用户难以接受这两点
- 【软件工程】第一章 软件工程概述 考试重点 复习记录
- 宇枫资本投资理财的几大定律
- 登陆+注册(vue+elementUI)
- 基于Citrix的云桌面远程连接Mac机
- 2022-2027年中国婴幼儿米粉市场竞争态势及行业投资前景预测报告
- 极路由 刷linux,极路由 刷uboot + openwrt , 以及连接校园网(netkeeper)
- 桌面不显示我的计算机显示器,电脑桌面显示怎么分屏显示不出来怎么办
- CentOS下用命令查看IP地址
- pyhton获取 中国各个省份/直辖市拥有的上市公司数目
- 网店买书如何避免被骗?
- 培育百万开发者,Serverless的主战场