将所有石头按距离远近排序,将所有取到的时候扔进堆里维护最大磁力强度。

贪心,每次用强度最强的磁石尝试吸引地上的石头,扫完区间以后,这块石头就再也不会用到了。

在此基础上可以做些小优化,比如说优化未取石头区间的起始点,比如说如果强度更小的石头范围也更小就不用它,等等。

比标解分块跑得还要快2333333

分块解法链接:http://www.cnblogs.com/SilverNebula/p/5929668.html

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
#define LL long long
using namespace std;
const int mxn=;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
struct stone{
double dis;
int m,p,r;
bool got;
}s[mxn];
bool operator < (stone a,stone b){
return a.dis<b.dis;
}
struct tool{
int r,p;
}t[mxn];int cnt=;
bool operator < (tool a,tool b){
return a.p<b.p;
}
priority_queue<tool>tp; double dist(double x1,double y1,double x2,double y2){
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int n;
int x,y;
int main(){ int x0,y0;
scanf("%d%d%d%d%d",&x0,&y0,&t[].p,&t[].r,&n);
int i,j;
for(i=;i<=n;i++){
// scanf("%d%d%d%d%d",&x,&y,&s[i].m,&s[i].p,&s[i].r);
x=read();y=read();s[i].m=read();s[i].p=read();s[i].r=read();
s[i].dis=dist(x0,y0,x,y);
s[i].got=;
}
sort(s+,s+n+);
// for(i=1;i<=n;i++)printf("dis:%.3f m:%d r:%d p:%d\n",s[i].dis,s[i].m,s[i].r,s[i].p);
// printf("finished\n");
tp.push(t[]);
int hd=;
int last=;
int lastp=;
while(!tp.empty()){
tool now=tp.top();tp.pop();
if(last>=now.r && lastp>=now.p)continue;
for(register int i=hd;i<=n && s[i].dis<=(double)now.r;i++){
if(!s[i].got && now.p>=s[i].m){
cnt++;
t[cnt].p=s[i].p;
t[cnt].r=s[i].r;
tp.push(t[cnt]);
s[i].got=;
}
}
while(s[hd].got)hd++;
last=now.r;
lastp=now.p;
}
printf("%d\n",cnt);
return ;
}

Contest Hunter #46 T1 磁力块 [花式暴力]的更多相关文章

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

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

  2. CH#46A 磁力块

    题意 磁力块 CH Round #46 - 「Adera 8」杯NOI模拟赛 描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐 ...

  3. 『磁力块 bfs 分块』

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

  4. Contest Hunter 3101

    题目 Contest Hunter 3101 阶乘分解 原题传送门 题目分析 这里介绍一个本蒟蒻自己\(yy\)出来的方法. 我们发现,对于某一个单个的整数\(n\),若\(n\)能被某一个数\(x\ ...

  5. 【CHOJ】磁力块

    题意描述 磁力块 在平面内分布着 \(N\) 个磁力块,同时你的手上也有一块. 你一开始站在给定的坐标上,当磁力块之间满足互相吸引的条件时就可以吸引. 当你拿到新的磁石时你就可以用它来吸引更多的石头, ...

  6. CH#46 磁力块 分块

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

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

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

  8. CH Round #46A 磁力块

    还是一道好题的 对于一个磁石是否被吸引,有两个关键字:距离和质量.(二维偏序??) 好像是很厉害的分块姿势,先按第一关键字排序,在块中按第二关键字排 进行bfs,对于当前磁石,有1~k-1个块是第一关 ...

  9. Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛

    orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...

随机推荐

  1. Bootstrap基本理论

    Bootstrap,来自 Twitter,是目前最受欢迎的前段框架.Bootstrap是基于HTML.CSS.JAVASCRIPT的,它简洁灵活,使得Web开发更加快捷 Bootstrap特点:优雅, ...

  2. Android Platform Version 和 API Level对照

    Platform Version API Level VERSION_CODE Notes Android 5.1 22 LOLLIPOP_MR1 Platform Highlights Androi ...

  3. Android开发中SharedPreferences的使用

    在Android开发中,在储存少量的数据时,个人感觉SharedPreferences是最好的选择,SharedPreferences是以键值对的方式进行储存,支持boolean,int,float, ...

  4. vSphere Client用户名密码保存记录

    vSphere Client在访问ESXi主机或vCenter后是默认不保存登录用户名和密码的,不过可以通过修改配置文件来保存,方便访问连接. 方法如下: 打开配置文件路径(实际安装路径):D:\Pr ...

  5. raid 0 1 5 10 总结的知识点

    raid 0 1 5 10 raid 发的别名条带 raid 0 读取性能最高需要磁盘2*N个(N>0)代表所有raid级别中的最高存储性能,其实原理就是把连续的数据分散到多个磁盘上存取,这样, ...

  6. Devops 技术图谱

  7. Android(java)学习笔记163:开发一个多界面的应用程序之界面间数据传递

    1.界面跳转的数据传递 (1)intent.setData() --> intent.getData():     传递的数据比较简单,一般是文本类型的数据String:倘若我们传递的数据比较复 ...

  8. centos下升级python

    1. wget http://www.python.org/ftp/python/3.3.0/Python-3.3.0.tgz 2.解压之后  tar -xzvf Python-3.3.0.tgz 3 ...

  9. C语言常用关键字及运算符操作---关键字

    每个知识点4问: 1. 是什么? 2. 什么时间用? 3. 怎么用? 4.为什么这么用? 1. 32个关键字 //(1)sizeof 的用法 //sizeof 是关键字,让编译器帮我们查看内存空间存储 ...

  10. ubuntu命令行转换图片像素大小

    convert -resize 512x256 00433.png 00001.png 1.512和256之间是x(就是字母那个x),用' * '反而会报错 2.这个命令会按照原图的比例进行转换 3. ...