Luogu P10590 磁力块】的更多相关文章

题意 磁力块 CH Round #46 - 「Adera 8」杯NOI模拟赛 描述 在一片广袤无垠的原野上,散落着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吸引的磁…
磁力块 Description 在一片广袤无垠的原野上,散落着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 吸引的磁石将会被吸引过…
题意描述 磁力块 在平面内分布着 \(N\) 个磁力块,同时你的手上也有一块. 你一开始站在给定的坐标上,当磁力块之间满足互相吸引的条件时就可以吸引. 当你拿到新的磁石时你就可以用它来吸引更多的石头,求你能吸引到的最多的磁石个数. 算法分析 既然一开始就确定了磁石,我们只需要依次 BFS 手上已有的磁石并吸引更多的磁石入队即可. 关键在于判定磁石能否被吸引,如果直接循环判断复杂度是 \(O(N^2)\) 的,所以需要数据结构来优化. 维护一个多维的结构貌似可以用平衡树,但是更好的方法是用代码复杂…
正解:分块+bfs 解题报告: 先放个传送门,然后瞎扯淡下QAQ 突然感觉不停课大概是正确的选择QAQ 大概实在是没有天赋?明明都知道正解是分块甚至还听了下解法感觉理解了,再看一次依然没想到解法,,,好菜啊,,,所以这种明明都落实过然而再看一次还是做不出来的题目是最最应该写题解的了QAQ 昂不叨叨了说说这题正解 1)  显然的是每块石头能吸的磁石是固定的,不存在改变次序之后会有改变,所以直接拿得到哪个磁石就把这个磁石能吸到的磁石都加入 队列,bfs就好了 这里是个最简单的暴力想法?还是不难想的我…
题目链接:传送门 描述在一片广袤无垠的原野上,散落着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吸引的磁石将会被吸引过来.在每个时刻,他可以选择更换任意一块自己已经获得…
描述 在一片广袤无垠的原野上,散落着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吸引的磁石将会被吸引过来.在每个时刻,他可以选择更换任意一块自己已经获得的磁石(当然也可…
将所有石头按距离远近排序,将所有取到的时候扔进堆里维护最大磁力强度. 贪心,每次用强度最强的磁石尝试吸引地上的石头,扫完区间以后,这块石头就再也不会用到了. 在此基础上可以做些小优化,比如说优化未取石头区间的起始点,比如说如果强度更小的石头范围也更小就不用它,等等. 比标解分块跑得还要快2333333 分块解法链接:http://www.cnblogs.com/SilverNebula/p/5929668.html #include<iostream> #include<cstdio&g…
还是一道好题的 对于一个磁石是否被吸引,有两个关键字:距离和质量.(二维偏序??) 好像是很厉害的分块姿势,先按第一关键字排序,在块中按第二关键字排 进行bfs,对于当前磁石,有1~k-1个块是第一关键字全部小于等于当前磁石的,那么暴力从块首往后,找到第一个第二关键字大于当前磁石属性的,那么前面都捡走,以后可以从这里开始找. 暴力枚举第k个块找答案. 一个优化就是找k的时候直接比较当前块的最大值就行了,因为当前的属性肯定是>kmin,<kmax滴 (垃圾CH本机AC提交WA幸好最后我搞对了)…
题目链接 大致题意 相邻格子不同为连通,计算每个点所在的连通块大小. 想法 我采用了并查集的做法. 开一个辅助数组记录连通块大小,每次合并的时候更新父亲节点的大小即可. 一个点先与它上面的点判定,若判定连通则加入上方点所属的块中. 再与左边的点判定,若连通则再将两个块合并. 总体复杂度O(n3)O(n^3)O(n3),其中并查集不加优化复杂度为O(n)O(n)O(n),使用路径压缩+按节点大小合并优化并查集,将并查集复杂度降低为近似O(1)O(1)O(1),总体复杂度近似为O(n2)O(n^2)…
NOIP2017 D1T1 的结论,两个数$a, b$所不能表示出的最大的数为$a * b - a - b$. 听了好几遍证明我还是不会 注意到本题中给出的数都非常小,所以最大不能表示出的数$\leq 256 * 256 - 256 * 2 = 65024$. 那么直接用这个$65024$作为背包容量跑完全背包就好了. 时间复杂度$O(maxV * n)$. Code: #include <cstdio> using namespace std; ; ; int n, a[N]; bool f…