01 2015 档案
poj3415
摘要:很久以前写的,忘补结题报告了两串相连中间用特殊的分隔符然后求height,由于要求求公共子串大于等于k的个数,并且只要位置不同即可因此不难想到在名次上对height分组,一组内的height保证>=k下面就是在组内统计的问题了然后还是不难发现,分别在AB串中的后缀i,j,他们能产生2*[LCP(i,... 阅读全文
posted @ 2015-01-31 23:55 acphile 阅读(153) 评论(0) 推荐(0)
bzoj1202
摘要:很久以前写的,忘补解题报告了首先似乎dfs就可以了吧?但还有更高大上的做法其实这东西就是告诉sum[y]-sum[x-1]=z然后给出一堆看成不成立可以用并查集,维护每个点到father点的差即可 1 var sum,fa:array[0..1010] of longint; 2 i,t,n... 阅读全文
posted @ 2015-01-31 23:30 acphile 阅读(190) 评论(0) 推荐(0)
bzoj1984
摘要:树链剖分在边上的应用比维护点稍微麻烦一点,是对每条边标号,并且要记录每个点父亲边的编号和重儿子然后注意各种细节线段树上和bzoj1858的维护方法类似,覆盖的优先级高于加具体见程序,完全是为了提升状态的练习 1 type node=record 2 po,next,num:long... 阅读全文
posted @ 2015-01-31 23:27 acphile 阅读(198) 评论(0) 推荐(0)
bzoj3875
摘要:悲伤地回忆,当初写了一个作死的算法爆零了为什么不好好写暴力呢……显然设w[i]表示彻底干掉这个怪物的代价注意发现这里的转移具有后效性,但是干掉每个怪物的最优值是一定的我们用spfa来转移,详见那篇spfa的论文 1 type node=record 2 po,next:longint;... 阅读全文
posted @ 2015-01-31 23:25 acphile 阅读(132) 评论(0) 推荐(0)
bzoj3876
摘要:不高兴的回忆啊啊啊当初这种简单题因为自己作死就暴零0了这题在OJ上是简单的最小有下界费用流,增广到正费用为止因为算的是总时限但实际的话似乎要用pacman吃豆豆那题的方法先用dp跑出第一次的增广路再用spfa增广 1 const inf=420007; 2 type node=record 3... 阅读全文
posted @ 2015-01-31 23:22 acphile 阅读(182) 评论(0) 推荐(0)
bzoj2209 2329
摘要:括号序列的经典做法把(看成1,)看成-1匹配的括号序列即任意前缀和都非负我们先解决静态的问题,给定一段括号序列求最少修改次数我们先找出最大后缀和a和最小前缀和b之间一定可以不相交显然a+|b|个括号是未匹配的显然修改即为(|b|+1) div 2+(a+1) div 2;由于序列的变化,我们用spl... 阅读全文
posted @ 2015-01-31 23:19 acphile 阅读(146) 评论(0) 推荐(0)
bzoj1835
摘要:最近状态太差,先补补结题报告吧这是一道好题设f[i,j]表示到第j个位置建了i个基站且第j个位置建了基站的最小花费不难得到f[i,j]=min(f[i-1,k]+cost[k+1,j])+c[j];首先为了方便计算假定在两端无穷远处还要建一个基站(方便统计)i我们是可以滚动的不管他,问题就是如何解决... 阅读全文
posted @ 2015-01-26 19:05 acphile 阅读(315) 评论(0) 推荐(0)
bzoj2426
摘要:稍微列个式子就知道是贪心 1 var w,h,c,a,f:array[0..50010] of longint; 2 m,b,h0,n,i,p,j,x,ans,s:longint; 3 4 procedure swap(var a,b:longint); 5 var c:longint... 阅读全文
posted @ 2015-01-26 19:05 acphile 阅读(164) 评论(0) 推荐(0)
bzoj1197
摘要:水题,画个图推一下低维的就什么都明白了从低维类推高维 1 var f:array[0..16,0..101] of int64; 2 n,m,j,i:longint; 3 4 begin 5 readln(m,n); 6 for i:=1 to n do 7 f[i,1]:... 阅读全文
posted @ 2015-01-26 19:04 acphile 阅读(137) 评论(0) 推荐(0)
bzoj1049
摘要:第一问类似最长上升序列,只不过因为要满足能修改所以不能直接求比如2 3 4 4 5 最长上升序列长是4,但是最少修改是2,因为一个这个最长上升序列不能保持不变因此我们对a[i]-i,然后求这个新序列ai的最长不下降序列即可第二问我们设f[i]表示以位置i结尾的最长不下降序列长度显然要满足修改最少的数... 阅读全文
posted @ 2015-01-26 19:03 acphile 阅读(164) 评论(0) 推荐(0)
bzoj2893
摘要:有起点终点的限制的路径覆盖首先tarjan缩点成DAG似乎不能按照二分匹配的做法做那么建立源汇拆点i,i',这两点之间连一条下界为1上界无穷的边,其它边都是下界为0,上界正无穷然后就是有源有汇的最小流,之前在bzoj2502介绍过 1 const inf=10000007; 2 type nod... 阅读全文
posted @ 2015-01-26 18:04 acphile 阅读(189) 评论(0) 推荐(0)
bzoj1820
摘要:水dp,状态表示三个司机当前在哪所用最小耗油,因为有一个一定在当前点所以可以压掉一维 1 var f,w,d:array[0..210,0..210] of longint; 2 a:array[0..1010] of longint; 3 x,y,i,j,k,n,ans:longint; ... 阅读全文
posted @ 2015-01-26 18:00 acphile 阅读(130) 评论(0) 推荐(0)
bzoj1819
摘要:水题,上trie,然后穷举每一位的时候判定一下三种编辑 1 var son:array[0..10010*20,1..26] of longint; 2 v:array[0..10010*20] of longint; 3 d:array[0..10010] of boolean; ... 阅读全文
posted @ 2015-01-26 17:59 acphile 阅读(189) 评论(0) 推荐(0)
bzoj1455
摘要:学习了一下可合并堆的一种写法——左偏树感觉左偏树是一种类似启发式的方法学习左偏树后这题就水过去了 1 var fa,l,r,a,d:array[0..1000010] of longint; 2 v:array[0..1000010] of boolean; 3 i,n,m,x,y,... 阅读全文
posted @ 2015-01-26 17:56 acphile 阅读(147) 评论(0) 推荐(0)
bzoj3689
摘要:这题做法很多可以通过类似noi超级钢琴那道题目的做法用可持久化+trie来做还可以直接在trie树上维护size域然后类似查找k大的做法做总之还是比较水的 1 type node=record 2 kth,num,ans:longint; 3 end; 4 5 v... 阅读全文
posted @ 2015-01-26 17:53 acphile 阅读(187) 评论(0) 推荐(0)
bzoj2165
摘要:类似于bzoj1706,考虑到楼层是等价的我们令f[p,i,j]为用了2^p次电梯,从房间i到j最多上升了多少层然后从2^p很容易推到2^(p+1),类似于floyd的转移即可下面我们要用最小的电梯次数可以考虑每一个数都有其唯一的而二进制拆分从p到0贪心得到一个最接近上了m层的次数ans,ans+1... 阅读全文
posted @ 2015-01-16 23:15 acphile 阅读(219) 评论(0) 推荐(0)
bzoj2809
摘要:可以先穷举那个是管理者,然后就发现其实就是求每个子树选尽可能多的人,使薪水和小于m这显然是从小往大选,可以用启发式合并但是用主席树写的更简单一点吧,dfs序之后每课线段树不仅维护出现出现个数,然后在维护一个区间和(未离散化之前的)然后类似查找第k大就可以解决了 1 type node=record... 阅读全文
posted @ 2015-01-16 22:52 acphile 阅读(147) 评论(0) 推荐(0)
bzoj2733
摘要:好久没写treap,稍微练练treap的启发式合并 1 const key=2000007; 2 var son:array[0..100010,1..2] of longint; 3 root,a,b,fa,count,f:array[0..100010] of longint; ... 阅读全文
posted @ 2015-01-16 22:48 acphile 阅读(159) 评论(0) 推荐(0)
bzoj1334
摘要:1 var f:array[0..100005] of boolean; 2 a:array[0..310] of longint; 3 i,n,s,j,ans:longint; 4 5 procedure sort(l,r: longint); 6 var i,j,x,y: long... 阅读全文
posted @ 2015-01-16 22:47 acphile 阅读(154) 评论(0) 推荐(0)
bzoj1211
摘要:prufer码水题(n-2)!/[(d1-1)!*(d2-1)!*…*(dn-1)!] 1 var c:array[0..200] of longint; 2 x,n,i,j,s:longint; 3 ans:int64; 4 5 begin 6 readln(n); 7 ... 阅读全文
posted @ 2015-01-16 22:45 acphile 阅读(116) 评论(0) 推荐(0)
bzoj3083 3306
摘要:又见bzoj的语言歧视,囧……bzoj3083过了本地的数据在上面出现各种奇葩的TLE835083 phile 3083 Time_Limit_Exceed 17092 kb 4872 ms Pascal/Edit 4931B 2015-01-11 19:53:3210s的时限在逗我?UPD:现在已... 阅读全文
posted @ 2015-01-16 22:42 acphile 阅读(162) 评论(0) 推荐(0)
bzoj3437
摘要:练一下斜率优化 1 var s1,s2,f:array[0..1000010] of int64; 2 q,a,b:array[0..1000010] of longint; 3 i,n,h,t,j:longint; 4 5 function g(j,k:longint):double; 6 var 阅读全文
posted @ 2015-01-16 22:11 acphile 阅读(129) 评论(0) 推荐(0)
bzoj1014
摘要:动态询问LCP,所以我们不好用后缀数组考虑使用维护序列问题的splay+hash求LCP这里mark一下,hash求LCP常用mo=9875321自然溢出的话交上去莫名其妙WA了这里树上某节点hash值代表的是这棵子树所代表的序列hash值求LCP时,只要二分答案然后提取区间判断hash是否相同即可... 阅读全文
posted @ 2015-01-16 22:02 acphile 阅读(153) 评论(0) 推荐(0)
bzoj2337
摘要:这句话感觉都能成定理了:xor问题逐位考虑……这道题就是这样,然后和bzoj3143和相似但这道题多了自环,于是我们设f[i]表示当前位由i走到n的后为1的数学期望显然f[n]=0,可得f[i]=sigma((1/d[i])*f[j])(如果边权这位为0)+sigma((1/d[i])*(1-f[j... 阅读全文
posted @ 2015-01-09 22:58 acphile 阅读(191) 评论(0) 推荐(0)
bzoj3166
摘要:首先不难想到穷举次大数然后我们只要找到满足这个数是次大数的最大区间即可显然答案只可能是这两种[LL[i]+1,R[i]-1]和[L[i]+1,RR[i]-1]L[i]表示这个数ai左侧第一个比它大的数的位置,LL[i]表示这个数ai左侧第二个比它的的数的位置R[i],RR[i]同理然后假如我们能快速... 阅读全文
posted @ 2015-01-09 22:55 acphile 阅读(133) 评论(0) 推荐(0)
bzoj2821
摘要:其实和bzoj2724是一样的都是先处理多个块的答案,然后多余部分暴力空间要注意一下,还是O(nsqrt(n)); 1 var f:array[0..320,0..320] of longint; 2 g:array[0..317,0..100001] of longint; 3 ... 阅读全文
posted @ 2015-01-09 22:43 acphile 阅读(179) 评论(0) 推荐(0)
bzoj1912
摘要:由于k只有2,所以我们分类讨论显然当k=1时,我们只要连一条最长的路径即可就是树的直径L少走了L-1条边如果k=2时,我们再次连边成环后如果成环路径与上一次的最长路径没有相同的边,那少走的边数是路径长l-1如果有相同的边,那么相同的边一共还是会走两次,少走的边数是l-1-2*same因此我们只要把第... 阅读全文
posted @ 2015-01-09 22:40 acphile 阅读(197) 评论(0) 推荐(0)
bzoj3504
摘要:这是一道最大流的题目首先要引起注意的是,这类多个起点多个终点的问题一定要同时跑,不能分开来跑由于是无向图,也就相当于从起点跑2*n次好,不难想到s向两个起点连边,两终点想t连边,流量为2*an或2*bn然后对于每条危桥,正向反向连边,流量都为2,然后做最大流判断是否满流但是这样会出现两个问题,第一个... 阅读全文
posted @ 2015-01-09 22:27 acphile 阅读(212) 评论(0) 推荐(1)
poj3580
摘要:区间操作的究极题,我们一个个来分析其实只有insert,delete,revolve三种没讲过insert 先把x旋到根,一开始我比较SB的,准备把新节点插入到右子树的最左节点,这显然很烦 好的方法是,直接在根和右孩子之间插入即可,相当于right[new]=right[root] ri... 阅读全文
posted @ 2015-01-09 22:02 acphile 阅读(128) 评论(0) 推荐(0)
bzoj1251
摘要:这道题相比较bzoj3223只不过多了一个区间加上一个数,这显然还是类似的和线段树经典的打标记类似 1 const inf=-2147483647; 2 sroot=-1; 3 var son:array[-1..50010,1..2] of longint; 4 fa,... 阅读全文
posted @ 2015-01-09 21:42 acphile 阅读(130) 评论(0) 推荐(0)
bzoj3223
摘要:很久没写splay了,这是用splay解决动态区间问题平常splay树的建立都是以键值建立的而这里是以位置序号为优先级建立的不难发现,tree上的点代表的位置就是它的名次splay的区间操作最重要的一点就是提取区间设提取区间[a,b],则我们只要代表位置a-1的点伸展到根,再把代表位置b+1的点伸展... 阅读全文
posted @ 2015-01-09 21:40 acphile 阅读(127) 评论(0) 推荐(0)
bzoj1212
摘要:trie树最基本的应用了不难得到f[i]=f[j] if (s[j+1~i]∈dictionary);可以用trie树匹配 1 var can,f:array[0..1000010] of boolean; 2 son:array[0..1000010,1..26] of longint; ... 阅读全文
posted @ 2015-01-09 21:27 acphile 阅读(122) 评论(0) 推荐(0)
bzoj3790
摘要:观察发现,这道题目其实就相当于一个最小区间覆盖问题这里的区间是指以每个点为中心的最长回文串很久没写manacher,有点感动不得不说manacher是一个非常好的算法 1 var s:array[0..100010] of char; 2 c,l,r,f,p:array[0..10001... 阅读全文
posted @ 2015-01-09 21:23 acphile 阅读(198) 评论(0) 推荐(0)
记一次惨痛的比赛
摘要:1月2日,UOJ Round 4,2015年的第一场比赛当我点开比赛的时候,何曾想过这次会以这样的方式告终:只得了10分,rating暴跌175当比赛结束的那一刻,我只感觉天旋地转。但,这又能怪谁呢?随便一个noip提高组选手几乎不可能有如此差的成绩,毕竟,T1充其量是一道noip级别的题目且不说... 阅读全文
posted @ 2015-01-02 23:11 acphile 阅读(140) 评论(0) 推荐(0)
bzoj2734
摘要:非常巧妙地题目对于一个数x列出这样的矩阵x 2x 4x 8x ……3x 6x 12x 24x ………………………………不难方案数就是求取数不相邻的方案数考虑矩阵宽不超过logn,所以可以用状压dp解决 1 const mo=1000000001; 2 3 var f:array[0..1... 阅读全文
posted @ 2015-01-01 20:58 acphile 阅读(170) 评论(0) 推荐(0)
bzoj2597
摘要:非常好的网络流题目首先这里用到了求补集的思想,我们可以先求不满足的三元对的情况设A-->B代表A赢B由于最后所有胜负关系都确定,一定是一个完全图,所以任意一个不合法的三元对,单独取出来一定是1个点出度为2,一个点入度为2,另一点出度1入度1不妨考虑入度为2的点,从这个点的入边中任意取两条不同的,一定... 阅读全文
posted @ 2015-01-01 20:54 acphile 阅读(190) 评论(0) 推荐(0)
bzoj1236
摘要:其实这道题目不难,主要要求我们有一个清晰地思路首先可以按位数讨论,这里我把1~9单独讨论了因为除了1位数,每个位数开头的数的开头数字1前面都是-号然后考虑位数的奇偶性当位数为奇数的时候比较简单举个例子-1+0-0+1-0+1 -1+0-2+1-0+3不难发现,奇位数从开头的数开始,相邻两个数数字和... 阅读全文
posted @ 2015-01-01 20:41 acphile 阅读(272) 评论(0) 推荐(0)
poj3233
摘要:这道题其实算是把快速幂的思想用在多项式之中A+A^2+A^3+…+A^n=(A+A^1…+A^[n/2])+A^[n/2](A+A+A^1…+A^[n/2])+n mod 2*A^n然后就是打码的问题了 1 var ans,a,b,c,f:array[0..30,0..30] of longint;... 阅读全文
posted @ 2015-01-01 20:28 acphile 阅读(136) 评论(0) 推荐(0)
bzoj1009
摘要:设f[i,j]为准考证号上第i位匹配到不吉祥数字第j位的方案数,显然j∈[0,m-1]下面我们就要想到怎么把f[i-1]转移到f[i]也就是当前匹配到第k位,那么下一位可能会匹配到哪一位显然我们可以穷举下一位的字符,利用KMP求出下一位会匹配到哪一位(KMP的失配思想)然后可以得出f[i,j]=f[... 阅读全文
posted @ 2015-01-01 19:51 acphile 阅读(430) 评论(0) 推荐(0)
bzoj1576 3694
摘要:两道题目本质是一样的bzoj1576我们先要用dij+heap处理出最短路径树和起点到每个点的最短路径而bzoj3694已经给出了最短路径树,所以直接dfs即可题目要求的是不走起点到每个点最短路径上的最后一条边的最短路径首先我们考虑非树边的影响,对于一条非树边(u,v),加入到最短路径树中必然会形成... 阅读全文
posted @ 2015-01-01 19:42 acphile 阅读(253) 评论(0) 推荐(0)