随笔分类 -  poj题解

摘要:题目大意:给出n个人,顺序对位置进行请求,如果第i个人请求的位置上有人,则让这个人顺延,如果顺延的位置继续有人,递归进行,问最后所有人的位置。 解:这题貌似可以用平衡树+并查集搞定,但是我队友强烈安利树状数组的做法。赛场上没出,赛后结合discuz想了一下,作一下处理。 首先如果是一个请求第a[i] 阅读全文
posted @ 2016-07-04 22:05 F.D.His.D 阅读(255) 评论(0) 推荐(0)
摘要:题目大意:略解:暴力枚举rqst之流的状态就行了,状态数不多,对运算顺序困惑了下,看了看题解是用栈自后往前弄。View Code 1 //Tautology 2 const 3 ttttt='tautology'; 4 fffff='not'; 5 inf='1.txt'; 6 maxl=111; 7 var 8 ask: string; 9 ans: boolean;10 stack: array[0..maxl]of longint;11 tot : longi... 阅读全文
posted @ 2012-05-08 19:04 F.D.His.D 阅读(229) 评论(0) 推荐(0)
摘要:题目大意:给出n,p, 求k^n=p;数据保证k,n都在合理范围内,p是高精度了。解:ym c,有pow函数,直接开方就行了..我还是写了一个高精度+二分,气愤的是他居然有无解的情况,而且很容易爆数组上限,要加一个数位的判断,嘛,写的就这样了,有点乱。View Code 1 //Power of Ceyptography 2 const 3 inf='1.txt'; 4 start=1000000001; 5 type 6 data=array[0..200]of longint; 7 var 8 p: data... 阅读全文
posted @ 2012-05-08 19:00 F.D.His.D 阅读(178) 评论(0) 推荐(0)
摘要:题目大意:求在x轴上放一些半径为d的圆,问至少多少个能将n个点覆盖,多组询问。解:原来想着:线段树+heap,可是看着这一个个0ms,不敢切,以后有时间切切看虐自己。正解是先把可行圆心区间求出来,然后求最多的不互斥区间(因为区间相斥的话,说明有共点,于是不用分配多一个雷达了),证明是首先如果当前l>rrr,inc(s), 若有l<rrr and r<rrr则新预设雷达于r,rrr:=r;好像有种隐约敢,说不出来,好难受,还是以后想透彻了再补本题的trick点也很多,例如,d<0, y<0,注意y=0竟然是合法的!!wa了两次,囧View Code 1 //Rada 阅读全文
posted @ 2012-05-05 11:28 F.D.His.D 阅读(219) 评论(0) 推荐(0)
摘要:解:状态压缩bfs,只是要优化常数,直接用ac[I, j]表示选择i行j列的状态转移,从我注释的地方能看出我为何tleView Code 1 //The Pilots Brothers' refrigerator 2 const 3 bili:array[1..4, 1..4]of longint=((1, 1<<1, 1<<2, 1<<3), 4 (1<<4, 1<<5, 1<<6, 1<<7), 5 (1<<... 阅读全文
posted @ 2012-05-04 19:43 F.D.His.D 阅读(195) 评论(0) 推荐(0)
摘要:题目大意:翻转棋游戏,在一个4*4的棋盘上,每个格子有两个颜色黑或白,把该个格子翻转(黑变白白变黑),同时它的上下左右4个格子也会如此,求把整个棋盘的颜色统一的方案,没有输出impossible解:状态压缩bfs,弱死了,首先是标记二掉了,一种状态出现过就不用取消了,二是忘记输出无解,wa+tle..,弱弱弱弱弱弱弱弱弱View Code 1 //Flip Game 2 const 3 win1=65535; 4 inf='1.txt'; 5 len=win1+100; 6 var 7 ac: array[0..5, 0..5]... 阅读全文
posted @ 2012-05-04 18:04 F.D.His.D 阅读(189) 评论(0) 推荐(0)
摘要:题目大意:多组询问,问每组,要买n种零件,每种零件都有各自的m种选择,每种零件有两种属性:带宽b和价格p,求一种方案,有max(min(all_b)/sum(p))解:discuss各种奇葩,无聊回去研究一下。我的做法是按b值排序,看b最大可以选多少(用多少b以上的能把n种零件买齐),如果fin点价格相同,则需要特殊处理,交换那些key点(使零件都有的点),再贪心,min[i] = 从i买到n的最小价格,然后枚举价格,从1 to fin即可,其实挺乱的,还是见程序吧。View Code 1 //Communication system 2 const 3 maxlen=... 阅读全文
posted @ 2012-05-03 15:39 F.D.His.D 阅读(220) 评论(0) 推荐(0)
摘要:题目大意:给出一副无向联通图,求把一些边改成有向边之后,整幅图还是为一个强连通分量。p.s.一开始在本地做的,没读懂题意,其实是让你把边改有向而非删除边,好像要求改的数量最多,本地我提交了一个把边读入输出的程序本地spj过了= =,poj上wa了才真正想算法的。解:我原意是把桥找出来,然后其他遍历,不过好像调错的样子。听说了fjy刷了个16ms p组第一,所以去参考了下,发现就是tarjan途中,桥输出双向,其他单向即可(因为tarjan就是在找一个最大的环),所以tarjan图中处理输出就行(注意横叉边也要输一次,也就是说除了输环,桥输双向,其他任意),不过后来还是跑了32ms..View 阅读全文
posted @ 2012-04-25 11:27 F.D.His.D 阅读(242) 评论(0) 推荐(0)
摘要:题目大意:给出一副图,求这幅图上可能的生成树中,树的最大边与最小边的差的最小值为多少;解:枚举最小边,kruskal,然后求出最大的一条边,询问,与答案比较。因为kruskal的最优,所以最小边一定的时候得到的生成树的最大边一定是最小的,注意无解输出1。还有记得并茶几的初始化。View Code 1 //poj 3352 2 const 3 maxn=1111; 4 maxm=1111; 5 type 6 data=record 7 next, dest, op: longint; 8 end... 阅读全文
posted @ 2012-04-10 12:33 F.D.His.D 阅读(184) 评论(0) 推荐(0)
摘要:POJ 1151题目大意:给出n个矩形(通过给出对角坐标确定),这些矩形间可能有重叠,求除去重叠后覆盖的面积是多少。解:矩形切割,只是用线段树去维护线段达到logn的效率。View Code 1 //poj 1151 2 const 3 maxn=1111; 4 inf='1.txt'; 5 type 6 type_node=record 7 mid, l, r, flag: longint; 8 x1, x2, cnt: double; 9 end; 10 ... 阅读全文
posted @ 2012-04-06 20:13 F.D.His.D 阅读(193) 评论(0) 推荐(0)
摘要:POJ 3468题目之前的吐槽:最近记忆力真的差很多了,刚刚做完来写解题报告,题目编号已然不记得….题目大意:给出n个数,我们有两个操作,q,x,y:询问区间[x,y]的和,c,x,y,z:区间[x,y]里的每一个数+z。解:树状数组,线段树,以及discuss里说splay可做。做这题目前用的线段树。线段树的常数真心恶心,递归就算了,而且clear操作写成函数那个常数大得我不敢看了,可是不写成函数又会把自己恶心到。主要是靠一个lazy操作,有一个tag域,如果这个区间在增加的区间内,tag累加,tag表示这个区间要加的数,然后每进入一条线段,clear,更新sum,tag直0,并且把tag传 阅读全文
posted @ 2012-04-06 20:13 F.D.His.D 阅读(337) 评论(0) 推荐(0)
摘要:POJ 2777题目大意:有len个区间,每次为[x,y]区间上色,然后有询问操作,问[x,y]区间上有多少种颜色。解:线段树维护,1wa是因为没看见x可以大于y并作出相应处理然后2wa3wa就是细节问题了,大体是l,r和s,e混淆。然后tle,是因为lazy写错了,正解应该是如果包含则直接改值,当以后如果在改的区间内,这个区间只有一个颜色的话,记得把原来的颜色递归给儿子,把c置0再递归处理(因为区间的划分决定了你目前所在的区间一定包含我们要涂改的区间的子区间,如果这个区间只有一个颜色那么新的子区间的插入就会改变这个情况,所以lazy标记置0,并一定要把原来的颜色递归下去!不然对这些子区间的询 阅读全文
posted @ 2012-04-06 20:10 F.D.His.D 阅读(178) 评论(0) 推荐(0)
摘要:POJ 2528题目大意:同上,只是x,y属于[1,10000000],最后询问能在这个[1,10000000]区间上能看见多少种颜色。解:线段树+离散化,把可能的端点值存起来,排序,在对应回去,然后线段数即可,1re是因为tree数组的大小没有考虑到端点数*2而再*2,2tle是因为find写错了,然后3wa是因为离散化?这里是个重点,因为离散化之后比如[1,2][4,5],虽然中间有区间[3,3]但是如果按上文离散化则会出问题,奇怪的是我的处理+上这个判断,如果两个数之间有其他数,则再离散化多这个中间数,但是wa了,有空回来复习的时候检查一下,把特殊处理删除反而ac了,第二天过来看,看了别 阅读全文
posted @ 2012-04-06 20:10 F.D.His.D 阅读(207) 评论(0) 推荐(0)
摘要:POJ: 3264题目大意:给出n个数,给出一个区间[x,y],求这个区间的最大最小值。解:可以用rmq的st算法,有空去切一下,这里用了线段树,入门,练习了构树和查询,不过自己对于左右端点的掌握还是需要犹豫。看到别人写了一个树状数组的写法,挺神的,有空写下,刷刷排名。研究了一下,对于修改删除的题不适用,改过则必须重新初始化。或者自己写一个链表?可能可以对付删除情况?线段树 1 //poj 3264 2 const 3 maxn=51111; 4 inf='1.txt'; 5 type 6 data=record 7 l, ... 阅读全文
posted @ 2012-04-06 20:09 F.D.His.D 阅读(359) 评论(0) 推荐(0)
摘要:POJ 2942题目大意:有n位骑士,他们间有一些仇恨关系,如果有仇恨则开会的时候不能坐在两侧,求至少删除多少名骑士,使得总可以找出奇数个骑士和平地坐下来开会?解:我挺天真的,一开始就去研究它给出的关系图,想了好久才去建补图。发现如果是可以坐在一起的话补图上就是一个圈,任务就是找奇圈,然后自己草莽地写了一个边双连通分量算,wa,调了略久,没思路,看题解,发现是点双连通(边双连通内可能有关节点,但是点双连通内一定没有桥,所以如果只是算出边双连通可能会因当中包含关节点而出错),况且我也是理解错题意了,我以为是找最大奇圈,但实际上是把所有的可能都算出来。正解首先是求点双连通,没找到一个块,对这个块进 阅读全文
posted @ 2012-04-06 20:08 F.D.His.D 阅读(357) 评论(0) 推荐(0)
摘要:POJ 1192Noi的题>.<题目大意:给出一些点,坐标都是整数,如果两个点的距离为1,则说明相邻..(省略繁琐题意),删点后连通……总之就是构建了一棵树,每个节点有一个权值,求这棵树的一颗子树,有权值最大。解:首先说下自己的二点,没看到树的性质(每两个点有且只有一条路径联通),然后刚刚切完一系列的双连通分量,很激动的用贪心,每次去除掉一个当前权值最小且非割点的的点=。=然后wa掉,检查半天,最后看discuss才知道完全是自己的题意理解错了,况且如果是图我这个是从本质上贪心不能,因为有时不一定去点,还可以有整个枝条不要的情况,每次去一个点贪心是做不到的,正解treedp,fjy 阅读全文
posted @ 2012-04-06 20:06 F.D.His.D 阅读(289) 评论(0) 推荐(0)
摘要:POJ 1985题目大意:在一棵树上求一条最长的路径(题目描述根本没说= =,看discuss才知道)解:听说可以两次bfs,不知道怎么做了,有空去研究下回来写报告。我是treedp,有dep记录当前节点向下最长的路径,f为当前节点可以有的最长路径,有更新f[x] = max(f[everyson], dep[firstmaxson]+cost+dep[secondmaxson]+cost).貌似输出f[根]?我则保险遍历了f一次囧。 阅读全文
posted @ 2012-04-06 20:06 F.D.His.D 阅读(162) 评论(0) 推荐(0)
摘要:POJ 3159题目大意:给n个小朋友们分糖果,其中有m个关系a b c,代表A允许B比自己最多多C个糖果,求第一个小朋友到第n个小朋友的糖果数的差最大是多少(满足这m个条件下)解:题目有隐藏题意,第n个小朋友(即班长要比1多),所以这些条件就是一个差分约束,然后求1到n的最短路即可(dist[x]表示1允许x比自己多多少,把关系传递,显然是一个最短路模型,如果存在一条1到x的路比已知短,显然要更新才能满足题意。),初始化全部为bilibili,dist[1]为0,鬼畜的是即使是spfa+slf+queue也会tle,但是用spfa+stack就会很快(我刷上第四名),300+ms,dij+h 阅读全文
posted @ 2012-04-06 20:01 F.D.His.D 阅读(234) 评论(0) 推荐(0)
摘要:POJ 3621题目大意:在一幅有向图上,求有一个环,使得环上的点权a与边权和b,有a/b最大。解:我觉得这个算数学题了,分析很巧妙,我还想爆搜什么的若爆了。01分数规划问题,这里的问题转换为ans = sum(v[i]*x[i] / e[i]*x[i]);x[i]为0或1,表示取或不取,所以x就是使命题成立的一个选择,默认符合题意。所以把式子整合: ans=v/e * x;∴ ans*e-v=0所以我们二分枚举ans,当枚举点mid比ans大时,就会有 mid*e-v>0,如果小于,则是问题的关键,会有mid*e-v<0,也就是说,在图上会有一个负环。所以构图 分析 ans=v/ 阅读全文
posted @ 2012-04-06 19:59 F.D.His.D 阅读(154) 评论(0) 推荐(0)
摘要:POJ 3177题目大意:同poj 3352。解:同poj3352,但记得处理重边的问题。View Code 1 //poj 3177 2 const 3 maxn=5111; 4 maxm=11111; 5 type 6 data=record 7 dest, next, op: longint; 8 end; 9 var 10 edge: array[1..maxm*2]of data; 11 pre, dfn, low, deg, vect: array... 阅读全文
posted @ 2012-04-06 19:54 F.D.His.D 阅读(270) 评论(0) 推荐(0)