摘要:
线段树题意:1到n的线段,m个操作Reset 将所有内存清空New x 申请一段长度为x的最左的未被占用的区间,返回它的位置,并占用它。找不到输出Reject NewFree x 找到x单元内存所在的连续的单元块,返回这个单元块的左右端点,并且清空这个单元块,如果这个单元x根本没被占用,则输出Reject FreeGet x 找到第x个单元块(而不是第x单元),返回这个单元块的起始位置即左端点这题还是和 poj 3667 Hotel 是一样的,查询一个最左的合法区间,修改一段区间这题使用vector按顺序来保存单元块,方便查找(可以使用二分)而线段树主要的query和updata函数是一样的# 阅读全文
摘要:
线段树题意:一个长度为n的线段,下面m个操作D x 表示将单元x毁掉R 表示修复最后毁坏的那个单元Q x 询问这个单元以及它周围有多少个连续的单元,如果它本身已经被毁坏了就是0要记录单元被损坏的顺序,用一个栈就好了,毁坏就入栈,修复就出栈说说思路,最难的是查询一个点附近有那些的连接着的区间这需要在线段树记录三个信息,tlen,llen,rlen,这个记录和poj 3667 Hotel记录的意义是相同的 , tlen表示该节点内最长的可用区间的长度,llen表示最左端数起的区间长度,rlen表示从最右端数起的区间长度对于一个点,看它是在当前区间的左半还是右半在左半的话,看看是不是在右端的连续区间 阅读全文
摘要:
几何题题意:题意不详说了,易懂,就是算面积,比较简单的题目分四种情况讨论即可1.不会碰到木板2.不会饶过木板,但是碰到(相当于一个圆被切掉了下面一小部分)3.绕过木板,在下方形成一个两个小圆4.两个小圆会重叠,减去重叠的部分匆匆忙忙写的代码,很乱,懒得修改了#include <cstdio>#include <cstring>#include <cmath>const double PI = acos(-1);const double E = 1e-9;double L,D,S,SS;double a,b,oo;double v1,v2,v3,v4;int 阅读全文
摘要:
推荐技术公众号:不爱睡觉的大猪 线段树 题意:有一个线段,从1到n,下面m个操作,操作分两个类型,以1开头的是查询操作,以2开头的是更新操作 1 w 表示在总区间内查询一个长度为w的可用区间,并且要最靠左,能找到的话返回这个区间的左端点并占用了这个区间,找不到返回0 好像n=10 , 1 3 查到的 阅读全文
摘要:
最短路题意:比较懒有点难描述,所以不说了,看Hint可以看懂的本题的巧妙之处是其实无论怎么走,从起点(固定的)走到任何一个点,到达那个点的时候速度都是确定的因为 速度为spa ,a--->b---->c , b点速度为 spb = spa * 2^(ha-hb) , c点速度为 spc = spb * 2^(hb - hc)式子一合并,就是 spc = spa * 2^(ha - hc) ,可见从点a走到点c,无论中间经过什么点,最后计算速度,之和点a和点c的高度差有关,当然和点a的速度也有关而起点是固定的(1,1),而起始速度是知道的,那么从点(1,1)走到任何一个点时的速度也就 阅读全文
摘要:
最短路题意:给n个点从1到n标号,下面一行是每个点的权,另外给出m条边,下面是每条边的信息,两个端点+权值,边是无向边。你的任务是选出一些边,使这个图变成一棵树。这棵树的花费是这样算的,1号固定为树根,树中每个双亲节点下面的边都有个单价(即边权),然后单价乘上这条边的下面所有的子孙后代的点权和(看sample2,只要除掉边 1 5 9 按照这个方法就能算出1210)分析:把sample2用式子列一下就能发现,每个点的权都要乘上好几条边的权,是哪几条边呢,就是这个点回到点1的路径上的那些边所以最后的树的花费可以写成 res = sum{ (点权) * (该点回到点1的路径的边权和) } ,这些点 阅读全文
摘要:
继续复习Dij变形,可用DP题意:求点1到点n,最大的载重量。转化为 ,1到n有多条路径,每条路径都有一个最小的边,求这些最小的边中的最大值定义d[v] 表示到点v的最小边最大值 , 从u到v,边权为w,那么首先选出 temp = min( d[u] , w) , d[v] = max(d[v] , temp)这是显然的,由u到v,边权为w,要经过这条边,必须流量不能比w大,否则流不过溜过去之后,选最大的用优先队列+dij变形来做,改变的只是松弛的条件而这中问题,用dp来解也是显而易见的,不写了,以前写过#include <cstdio>#include <cstring&g 阅读全文
摘要:
基础搜索中文题意不解释,这题没看sample直接看完题目就打,发现不对,才看到数据可能各种无聊的坑1.可能出现相同位置的点,直接判NO2.两个点中,可能一个点是空白点,直接判NO3.两个点的值不同,直接判NO剩下的情况才是值得去搜索的,即两点值相同且都不是空白同BFS去搜定义状态,包括信息有1.x,y即该点在盘中的坐标2.c,从起点走到这里,转弯次数,为0,1,2。 3或以上的已经不行了,直接抛弃掉3.n,方向,从什么方向来到这个点,有0,1,2,3表示上,左,右,下,这样排序方便计算然后每次从当前点往4个方向搜索,并且开一个标记数组来标记哪些状态在队列中,inq[x][y][c][n],耗时 阅读全文
摘要:
几何题题意:给出n个圆的圆心坐标和半径,给出一个单位方格,在(0,0),(0,1),问这些圆覆盖的面积占方格的百分比,圆超出方格的部分不计算。另外算百分比,答案精确到1%即可,即整数部分正确即可,小数部分不要求这题,可以想按照题意直接下手,未免太难了,另外注意到答案的输出,其实对精度的要求很低(对小数都没要求)。我们可以用一直近似的算法来解决将方格分割为一个一个的小格子,当分割得很小的时候,格子可以看做是一个点,然后看这个点在不在圆上或圆内,在的话相当于圆覆盖了这个点,覆盖了这个格子。所以我们将1*1方格分割为1000*1000的格子,然后逐一去判断,很暴力的方法,但就是这样过了#includ 阅读全文
摘要:
最短路题意: 强调是有向图 , n个点(1到n标号)m条边,求出点1到所有点的最短路之和 + 所有点到点1的最短路之和什么?求一次最短路,然后 x 2 就是答案? 这样是错的,如果是无向图的话可以这样,因为可以逆回去走。但是有向图显然不是,点1到点a的最短路,和点a到点1的最短路是完全不同的,值不同走过的路径也不同.要求点1到所有点的最短路,直接运行一次最短路即可。但是要求所有点到点1的最短路,难道要对所有点运行一次最短路吗?一看点数就可以否定这个想法。可以这样想,如果点a到点1存在最短路,那么把这条路径的边全部取反,就是点1到点a的最短路了。所有在求了第1次最短路后,将 整个图的边取反,再求 阅读全文