描述

在一片广袤无垠的原野上,散落着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 磁力块 [分块]相关推荐

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

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

  2. 『磁力块 bfs 分块』

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

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

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

  4. 蓝书(算法竞赛进阶指南)刷题记录——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 ...

  5. AW250 磁力块(分块)

    题目地址 易错点: 和要用long long存储. 读入的吸引半径需要乘方(因为通过(x-x0)*(x-x0)-(y-y0)*(y-y0)获取的值本身就是乘方的). (分块)右端点需要用min(n,i ...

  6. NC 51114. 磁力块

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

  7. Contest Hunter CH6201 走廊泼水节 最小生成树 Kruskal

    $ \rightarrow $ 戳我进CH原题 走廊泼水节 0x60「图论」例题 总时限10 s $ \quad $ 总内存256 MiB 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边, ...

  8. Contest Hunter 0103最短Hamilton路径 【状压dp】 By cellur925

    题目传送门 Hamilton路径的定义:从0(起点)到n-1(终点)不重不漏地经过每个点恰好一次. 由于数据范围非常小,考虑状压.如NOIP2017宝藏一题,把状态压缩设为n个点是否已到达的二进制数. ...

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

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

最新文章

  1. 11款新品,一切为了落地!商汤:普惠AI的时代,来了
  2. python关系运算符可以连续使用_python学习笔记-字符串拼接关系运算符逻辑运算符...
  3. Quartz实现定时任务实例
  4. eclipse下面web工程没有src/main目录
  5. python中关于turtle库的学习笔记
  6. SAP Spartacus里的concurrently依赖
  7. 安卓游戏开发用什么引擎_游戏开发学习第一天————用什么软件
  8. 使用tmpfs的好处
  9. 网易我的世界qq版服务器维护中,网易《我的世界》官方发布Hypixel中国版服务器停止运营公告...
  10. 业务流程管理模型优化设计
  11. 传音上演另类国产手机出海记:非洲之王却闯不出非洲
  12. 一个Java开发h5牌九棋牌网站开发细节
  13. 【科普】Windows客户端加域管理(AD)
  14. 浪漫表白c语言程序玫瑰,c语言玫瑰告白代码
  15. 基于MATLAB的图片中文字的提取及识别
  16. Python打印九九乘法口诀表
  17. VGA、HDMI、DP你都懂吗?显示接口大盘点
  18. Java设计模式博客全目录
  19. 职场打拼的15个基本能力
  20. win10一键修改IP地址

热门文章

  1. 2018年9月发布——Autobetsoft_v3.6_2018_09_免费版
  2. GridView CheckBox 实现全选,跨页 CheckBox选择
  3. Pandas超市商品交易数据分析
  4. leetcode-剑指 Offer 46. 把数字翻译成字符串
  5. 好用的在线客服系统有哪些
  6. 【中石油OJ-5151】 Jumping Haybales
  7. 短视频软件开发,仿抖音滑动播放视频的实现
  8. p2p借贷网站--中兴财富模板
  9. 一笔画问题 最少笔画数问题
  10. CF 327 A Flipping Game