Contest Hunter #46 T1 磁力块 [花式暴力]
将所有石头按距离远近排序,将所有取到的时候扔进堆里维护最大磁力强度。
贪心,每次用强度最强的磁石尝试吸引地上的石头,扫完区间以后,这块石头就再也不会用到了。
在此基础上可以做些小优化,比如说优化未取石头区间的起始点,比如说如果强度更小的石头范围也更小就不用它,等等。
比标解分块跑得还要快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 磁力块 [花式暴力]的更多相关文章
- Contest Hunter #46 T1 磁力块 [分块]
描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐标,m是磁石的质量,p是磁力,r是吸引半径.若磁石A与磁石B的距离不大于磁石A ...
- CH#46A 磁力块
题意 磁力块 CH Round #46 - 「Adera 8」杯NOI模拟赛 描述 在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐 ...
- 『磁力块 bfs 分块』
磁力块 Description 在一片广袤无垠的原野上,散落着N 块磁石.每个磁石的性质可以用一个五元组 (x,y,m,p,r)描述,其中x,y 表示其坐标,m 是磁石的质量,p 是磁力,r 是吸引半 ...
- Contest Hunter 3101
题目 Contest Hunter 3101 阶乘分解 原题传送门 题目分析 这里介绍一个本蒟蒻自己\(yy\)出来的方法. 我们发现,对于某一个单个的整数\(n\),若\(n\)能被某一个数\(x\ ...
- 【CHOJ】磁力块
题意描述 磁力块 在平面内分布着 \(N\) 个磁力块,同时你的手上也有一块. 你一开始站在给定的坐标上,当磁力块之间满足互相吸引的条件时就可以吸引. 当你拿到新的磁石时你就可以用它来吸引更多的石头, ...
- CH#46 磁力块 分块
正解:分块+bfs 解题报告: 先放个传送门,然后瞎扯淡下QAQ 突然感觉不停课大概是正确的选择QAQ 大概实在是没有天赋?明明都知道正解是分块甚至还听了下解法感觉理解了,再看一次依然没想到解法,,, ...
- CH #46A - 磁力块 - [分块]
题目链接:传送门 描述在一片广袤无垠的原野上,散落着N块磁石.每个磁石的性质可以用一个五元组(x,y,m,p,r)描述,其中x,y表示其坐标,m是磁石的质量,p是磁力,r是吸引半径.若磁石A与磁石B的 ...
- CH Round #46A 磁力块
还是一道好题的 对于一个磁石是否被吸引,有两个关键字:距离和质量.(二维偏序??) 好像是很厉害的分块姿势,先按第一关键字排序,在块中按第二关键字排 进行bfs,对于当前磁石,有1~k-1个块是第一关 ...
- Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛
orz lydrainbowcat [Problem A]「艦これ市」70万幕后交易事件 排序机器=-=.重要的是相同的处理. 我们可以从小到大添加数字,然后维护一个位置的序列.每一种相等的数字都在一 ...
随机推荐
- 前端之CSS创建的样式
CSS即层叠样式表,在创建时有以下几种样式: 1.内联样式(行内样式.行间样式): <标记 style=“属性:属性值:”></标记> 2.内部样式(嵌入式样式): <s ...
- 在服务端C#如何利用NPOI构建Excel模板
目前本人接触过两种模板导出的方式:(1)C#利用NPOI接口制作Excel模板,在服务端用数据渲染模板(2)在前端利用前人搭建好的框架,利用office编写xml制作模板,在客户端进行数据的渲染,导出 ...
- 最新版kubernetesV1.14.1集群一键自动部署脚本
部署命令如下:详情及注意事项请看README.md git clone https://github.com/luckman666/deploy_Kubernetes-v1.14.1.git cd d ...
- SpringBoot学习 (一) Eclipse中创建新的SpringBoot项目
1. Eclipse中安装STS插件 (1)在线安装 Help--Eclipse Marketplace... 搜索“STS”,点击“install”安装 (2)本地安装 打开网页 http:/ ...
- 51nod 1272 最大距离
题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 给出一个长度为N的整数数组A,对于每一个数组元素,如果他后面存在大于等 ...
- PYTHON PIP和kivy安装教程
我们安装pip.我们同样需要在Python的官网上去下载 下载地址:https://pypi.python.org/pypi/pip 下载完成之后,解压到一个文件夹,用CMD控制台进入解压目录,输入: ...
- java项目部署jar包
1. 先将打包成jar包 2. 查看所有的java进程 pgrep java 3. 杀死进程 kill -9 程序号 4.执行命令 nohup java -jar admin.jar > ...
- Python基础3 函数 变量 递归 -DAY3
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- python导包一不小心就入坑(常用解决办法)
常见导包报错: - ImportError:No module named - SystemError: Parent module '' not loaded, cannot perform rel ...
- List去重复数据
for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j > i; j -- ...