还是一道好题的

对于一个磁石是否被吸引,有两个关键字:距离和质量。(二维偏序??)

好像是很厉害的分块姿势,先按第一关键字排序,在块中按第二关键字排

进行bfs,对于当前磁石,有1~k-1个块是第一关键字全部小于等于当前磁石的,那么暴力从块首往后,找到第一个第二关键字大于当前磁石属性的,那么前面都捡走,以后可以从这里开始找。

暴力枚举第k个块找答案。

一个优化就是找k的时候直接比较当前块的最大值就行了,因为当前的属性肯定是>kmin,<kmax滴

(垃圾CH本机AC提交WA幸好最后我搞对了)

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL; int n;
struct node{LL dis,m,p,r;}a[];bool v[];
bool cmp1(node n1,node n2){return n1.m<n2.m;}
bool cmp2(node n1,node n2){return n1.dis<n2.dis;} int block,st[];
struct LIST
{
LL p,r;
}list[];
int be[];LL mx[]; int findk(LL p)
{
for(int i=;i<=block;i++)
if(p<mx[i])return i;
return block+;
} int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout); LL xx,yy,x,y;
scanf("%lld%lld%lld%lld%d",&xx,&yy,&list[].p,&list[].r,&n);
for(int i=;i<=n;i++)
{
scanf("%lld%lld%lld%lld%lld",&x,&y,&a[i].m,&a[i].p,&a[i].r);
a[i].dis=(x-xx)*(x-xx)+(y-yy)*(y-yy);
}
sort(a+,a+n+,cmp1); block=(int(sqrt(double(n+))))+;
for(int i=;i<=n;i++)st[i]=(i-)/block+;
for(int i=;i<=block;i++)
{
int St=(i-)*block+,Ed=min(i*block,n);mx[i]=a[Ed].m;
if(St<=Ed)sort(a+St,a+Ed+,cmp2);
} for(int i=;i<=block;i++)be[i]=;
memset(v,false,sizeof(v));
int head=,tail=,ans=;
while(head<tail)
{
LL p=list[head].p,r=list[head].r;
int k=findk(p);
for(int i=;i<=k-;i++)
{
for(int j=be[i];j<=block&&(i-)*block+j<=n;j++)
{
int u=(i-)*block+j;
if(a[u].dis>r*r){be[i]=j;break;}
{
if(v[u]==false)
{
v[u]=true;
ans++;
list[tail].p=a[u].p, list[tail].r=a[u].r;
tail++;
}
}
}
}
if(k!=block+)
{
for(int j=be[k];j<=block&&(k-)*block+j<=n;j++)
{
int u=(k-)*block+j;
if(a[u].dis>r*r)break;
else if(a[u].m<=p)
{
if(v[u]==false)
{
v[u]=true;
ans++;
list[tail].p=a[u].p, list[tail].r=a[u].r;
tail++;
}
}
}
}
head++;
}
printf("%d\n",ans);
return ;
}

CH Round #46A 磁力块的更多相关文章

  1. CH#46A 磁力块

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

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

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

  3. CH Round #52 还教室[线段树 方差]

    还教室 CH Round #52 - Thinking Bear #1 (NOIP模拟赛) [引子]还记得 NOIP 2012 提高组 Day2 中的借教室吗?时光飞逝,光阴荏苒,两年过去了,曾经借教 ...

  4. CH Round #72树洞[二分答案 DFS&&BFS]

    树洞 CH Round #72 - NOIP夏季划水赛 描述 在一片栖息地上有N棵树,每棵树下住着一只兔子,有M条路径连接这些树.更特殊地是,只有一棵树有3条或更多的路径与它相连,其它的树只有1条或2 ...

  5. CH Round #30 摆花[矩阵乘法]

    摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...

  6. contesthunter CH Round #64 - MFOI杯水题欢乐赛day1 solve

    http://www.contesthunter.org/contest/CH Round %2364 - MFOI杯水题欢乐赛 day1/Solve Solve CH Round #64 - MFO ...

  7. CH Round #17 舞动的夜晚

    舞动的夜晚 CH Round #17 描述 L公司和H公司举办了一次联谊晚会.晚会上,L公司的N位员工和H公司的M位员工打算进行一场交际舞.在这些领导中,一些L公司的员工和H公司的员工之间是互相认识的 ...

  8. CH Round #45 能量释放

    能量释放 CH Round #45 - alan有一些陷阱 III 题目描述 alan得到一块由个能量晶体构成的矿石,对于矿石中的每一个能量晶体,如果用化学物质刺激某一个能量晶体,就能使它释放能量. ...

  9. CH Round #57 - Story of the OI Class 凯撒密码

    很有意思的一道题目 考场上想的是HASH成一个整数,把末位asicc码值*1,依次乘*10,得到一个整数,然后利用等差性.唯一性快排Nlogn乱搞的 证明如下: 对于明文abcde 密文 bcdef ...

随机推荐

  1. Spring Boot (11) mybatis 关联映射

    一对多 查询category中的某一条数据,同时查询该分类下的所有Product. Category.java public class Category { private Integer id; ...

  2. VMWare 在物理机待机后,报错“该虚拟机似乎正在使用中”

    在物理机待机后,刚打开虚拟机,就弹出这个画面(这种情况经常出现在远程之后,本机待机之后) 点击确定后,就弹出 当点击取消,无反应,而且再次点击VM2又弹出以上窗口,点击获取所有权,则弹出以下窗口 上网 ...

  3. Visual Basic for Application

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'The note of Visual Basic for Applicati ...

  4. H5-data属性的一个问题

    关于前端存数据的问题,前面写过一个博客:前端页面存取数据 看个例子: <!DOCTYPE html> <html lang="en"> <head&g ...

  5. Windows server 2008R2系统登录密码破解

    服务器密码忘记,或者被恶意修改,系统被入侵,都是很让人烦心的事情,我试过很多方法,包括使用PE工具删除C盘Windows\System\config里面的SAM文件,可是过程都相当华美,结果都相当杯具 ...

  6. 崂山白花蛇草水 权值线段树套KDtree

    Description 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实 力,他轻松地进了山东省省队,现在便是他履行诺言的时 ...

  7. 编写输出Hellow word!

    打开java运行环境(eclipse),然后输入以下语句,点击编译运行后即可输出“Hello World,”. public class HelloWorld { public static void ...

  8. onunload与onbeforeunload事件解析 标签: 浏览器 2017-04-10 09:46 45人阅读 评论(0)

    注:只测试了chrome和IE浏览器的表现情况 onunload事件 //JS Document window.onunload = onunload_message; function onunlo ...

  9. javascript正则表达式总结(test|match|search|replace|split|exec)

    test:测试string是否包含有匹配结果,包含返回true,不包含返回false. <script type="text/javascript"> var str ...

  10. Golang - 开篇必须吹牛逼

    目录 Golang - 开篇必须吹牛逼 Go牛逼吗 安装环境 Golang - 开篇必须吹牛逼 (1)我们为什么要学 高并发 深度 || 广度 (2)go学习思路和目标 多打多练 掌握go语言 做一个 ...