Contest Hunter #46 T1 磁力块 [分块]
描述
在一片广袤无垠的原野上,散落着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)。
样例输入
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
数据范围与约定
- 对于30%的数据,1<=N<=1000。
- 对于100%的数据,1<=N<=250000,-10^9<=x,y<=10^9,1<=m,p,r<=10^9。
将石块按距离分块,每块内按质量排序。挨个尝试用已有的石头吸引剩下的石头即可。
一直觉得分块就是稍有些技巧的暴力……
事实上这题的标解分块还真不如我的花式暴力跑得快23333
花式暴力:http://www.cnblogs.com/SilverNebula/p/5929674.html
1 /*by SilverN*/ 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 const int w=700; 9 const int mxn=270000; 10 int read(){ 11 int x=0,f=1;char ch=getchar(); 12 while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} 13 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} 14 return x*f; 15 } 16 struct node{ 17 double dis; 18 int m,p,r; 19 bool got; 20 }p[mxn]; 21 int hd[mxn]; 22 int cmpd(const node a,const node b){ 23 return a.dis<b.dis; 24 } 25 int cmpm(const node a,const node b){ 26 return a.m<b.m; 27 } 28 // 29 int L[mxn],R[mxn],tot=0; 30 double D[mxn]; 31 // 32 struct tool{ 33 int p,r; 34 }t[mxn];int cnt=1; 35 int head=1; 36 int n; 37 int x0,yy0; 38 double dist(int x1,int y1,int x2,int y2){ 39 return sqrt( (double)(x1-x2)*(x1-x2)+(double)(y1-y2)*(y1-y2) ); 40 } 41 int main(){ 42 x0=read();yy0=read(); 43 int i,j; 44 t[1].p=read();t[1].r=read(); 45 n=read(); 46 int x,y; 47 for(i=1;i<=n;i++){ 48 x=read();y=read(); 49 p[i].dis=dist(x,y,x0,yy0); 50 p[i].m=read(); p[i].p=read(); p[i].r=read(); 51 p[i].got=0; 52 } 53 sort(p+1,p+n+1,cmpd); 54 for(i=1;i<=n;i+=w){ 55 L[++tot]=i;R[tot]=min(n,i+w-1);D[tot]=p[R[tot]].dis; 56 sort(p+L[tot],p+R[tot]+1,cmpm); 57 } 58 while(head<=cnt){ 59 tool now=t[head]; 60 for(i=1;i<=tot;i++){ 61 if(D[i]>now.r){ 62 for(j=L[i];j<=R[i];j++) 63 if(!p[j].got && p[j].dis<=now.r && p[j].m<=now.p){ 64 t[++cnt].p=p[j].p; 65 t[cnt].r=p[j].r; 66 p[j].got=1; 67 } 68 break; 69 } 70 while(L[i]<=R[i] && p[L[i]].m<=now.p){ 71 if(!p[L[i]].got){ 72 p[L[i]].got=1; 73 t[++cnt].p=p[L[i]].p; 74 t[cnt].r=p[L[i]].r; 75 } 76 L[i]++; 77 } 78 } 79 head++; 80 } 81 printf("%d\n",cnt-1); 82 return 0; 83 }
转载于:https://www.cnblogs.com/SilverNebula/p/5929668.html
Contest Hunter #46 T1 磁力块 [分块]相关推荐
- 【题解】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 ...
- AW250 磁力块(分块)
题目地址 易错点: 和要用long long存储. 读入的吸引半径需要乘方(因为通过(x-x0)*(x-x0)-(y-y0)*(y-y0)获取的值本身就是乘方的). (分块)右端点需要用min(n,i ...
- NC 51114. 磁力块
链接 https://ac.nowcoder.com/acm/problem/51114 题意 有 NNN 块磁石,每个磁石的性质可以用一个五元组 (x,y,m,p,r)(x,y,m,p,r)(x,y ...
- Contest Hunter CH6201 走廊泼水节 最小生成树 Kruskal
$ \rightarrow $ 戳我进CH原题 走廊泼水节 0x60「图论」例题 总时限10 s $ \quad $ 总内存256 MiB 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边, ...
- Contest Hunter 0103最短Hamilton路径 【状压dp】 By cellur925
题目传送门 Hamilton路径的定义:从0(起点)到n-1(终点)不重不漏地经过每个点恰好一次. 由于数据范围非常小,考虑状压.如NOIP2017宝藏一题,把状态压缩设为n个点是否已到达的二进制数. ...
- OI每周刷题记录——lrllrl
看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...
最新文章
- 11款新品,一切为了落地!商汤:普惠AI的时代,来了
- python关系运算符可以连续使用_python学习笔记-字符串拼接关系运算符逻辑运算符...
- Quartz实现定时任务实例
- eclipse下面web工程没有src/main目录
- python中关于turtle库的学习笔记
- SAP Spartacus里的concurrently依赖
- 安卓游戏开发用什么引擎_游戏开发学习第一天————用什么软件
- 使用tmpfs的好处
- 网易我的世界qq版服务器维护中,网易《我的世界》官方发布Hypixel中国版服务器停止运营公告...
- 业务流程管理模型优化设计
- 传音上演另类国产手机出海记:非洲之王却闯不出非洲
- 一个Java开发h5牌九棋牌网站开发细节
- 【科普】Windows客户端加域管理(AD)
- 浪漫表白c语言程序玫瑰,c语言玫瑰告白代码
- 基于MATLAB的图片中文字的提取及识别
- Python打印九九乘法口诀表
- VGA、HDMI、DP你都懂吗?显示接口大盘点
- Java设计模式博客全目录
- 职场打拼的15个基本能力
- win10一键修改IP地址