习题总结
文章平均质量分 73
jasonzhu8
一名正在努力的OIer。
展开
-
【最小费用最大流】火车问题
题目大意如下: 一个车站有N条车道(N 求最大获利不妨转化成最小损失,每漏掉一辆货车损失Ci,马上可以想到最小费用最大流。 每个点(车)都要求有1的流量经过,那么把这个点拆成两个点,之间连一条边容量为1,最后的答案是使得这类边满流的费用最小的可行流。 因此这些点都要得到1的流量,那么不妨把它看成一个入点一个出点,现在更加详细的分析下: 1. 每个入点必须得到1的流量,每个出点必须释放1的流量,那么S向入点连一条容量为1的边,出点向T连一条容量为1的原创 2010-07-15 23:54:00 · 758 阅读 · 1 评论 -
判定性统计问题的启发
<br />今天看见这样一道题目:<br />一个N*N的矩阵(N<2000),满足下列两个操作:<br />1.添加一个子矩形;2.查询某个点被多少个矩形覆盖,并销毁这些矩形。<br /> <br />如果没有后面这句“销毁”的话,这就是个水题了,直接用二维树状数组维护点事件即可,但是需要销毁,怎么办?<br /> <br />尽然不能直观的查询某个点会被多少个矩形覆盖,那么不防换一个角度:查询这个矩形是被哪个点销毁的,首先我们可以知道,每个矩形只会被一个点销毁,那么是满足什么条件的点才可以满足呢?我们相原创 2010-11-06 23:20:00 · 614 阅读 · 1 评论 -
【有限制的 Pólya+矩阵快速幂】poj2888
<br />神题神题~~被他折磨了一下午,不过大大加深了我对 Pólya 和 Burnside 的理解。<br /> <br />初学 Pólya 和 Burnside 的时候发现数学太重口味了,背了个公式草草走人,今天为了做这道题可是费了血本把组合数学的书翻出来看,哎,都怪组合数学课上YY去了。<br /> <br /> 花了1个小时的时间强啃,总算是有了些收获,小小的总结下。<br /> <br />首先是几个名词:<br />1.着色方案;<br />2.置换,置换群;<br />3.不动置换,对于某原创 2010-11-07 17:54:00 · 1921 阅读 · 1 评论 -
【后缀数组,RMQ】poj3693
<br />非常恶心的一道题目,看了罗的论文,其中并没有说最小的字典序怎么处理,我整整写了3个RMQ,哎哟~~<br /> <br />总之就是先枚举单个循环节的长度,然后再枚举,找公共前缀(后缀),关于字典序还要写另外一个RMQ。。<br /> <br />100行的代码对于我这种喜欢缩行的人已经很恐怖了。。<br />program ex3;const ln2=1/ln(2);type arr=array[0..100001] of longint;var x,y,r,sa,c:arr;原创 2010-11-09 22:16:00 · 1796 阅读 · 2 评论 -
【欧拉回路+高斯消元】超级翻转
<br />一道非常好的综合题!<br />因为有多组数据,要注意的是数组清零。<br />利用欧拉回路优美的性质构造异或方程组,详见刘书。<br /> <br />program ex1;var l,u,a,b:array[0..20,0..20] of longint; f:array[0..600,0..600] of boolean; p,next,d,o,g,ans:array[-2000..2000] of longint; t,n,i,j,k,v,sx,sy,ss,原创 2010-11-10 21:53:00 · 1162 阅读 · 0 评论 -
【计算几何】圆的面积并
<br />总之,圆的面积并是一个非常漂亮的算法,虽然说好像没有很强的扩展性以及实用性,但确实训练自己计算几何代码能力的好题目。<br />一下皆蒯自栗师《圆的并》解题报告:<br /> 试想,如果人来做此题,而不使用计算机计算,那么,人会采取什么样的方法呢?<br /><br /><br />首先要做一些预处理,如果一个圆完全被另一个圆包围,那么这一个圆可以删除。删除后,如果一个圆是孤立的圆,不与其它任何圆相交,就可以把这个圆的面积现算出来,也将它删去。剩下的工作就是求交点了。<br /><br /原创 2010-11-15 20:12:00 · 8602 阅读 · 7 评论 -
数位统计小结
<br /> “在信息学竞赛中,有这样一类问题:求给定区间中,满足给定条件的某个D 进制数或此类数的数量。所求的限定条件往往与数位有关,例如数位之和、指定数码个数、数的大小顺序分组等等。题目给定的区间往往很大,无法采用朴素的方法求解。此时,我们就需要利用数位的性质, 设计log(n)级别复杂度的算法。 解决这类问题最基本的思想就是 “逐位确定”的方法。下面就让我们通过几道例题来具体了解一下这类问题及其思考方法。”——09集训队论文《浅谈数位类统计问题》by 刘聪<br /> <br />以前碰到过一些原创 2010-11-21 17:41:00 · 2778 阅读 · 2 评论 -
【计算几何】zjoi2008 risk
<br />题目大意:给你一个平面图,平面被分成了若干个区域,求出每个区域与之相邻的区域,数据保证区域数不超过500;<br /> <br />有数据范围可以看出要求是低于N3的算法。<br /> <br />我的做法是:<br /> 1.将每一条线段AB拆成两条有向线段AB与BA,然后将所有有向线段AB与从B点引出的线段中位于AB顺时针方向的第一条线段连有向边(BA与AB的夹角为2PI,而不是0)。这样对所有的线段做一次DFS之后就能将图中的封闭区域全部求出来,这样出了某个区域包含的区域,其他相邻的区域原创 2011-02-25 20:30:00 · 1933 阅读 · 0 评论 -
【带模的除法】poi2008 per
<br />这道题的难点在于带模的除法,可恶的是模还不是质数,更可恶的是还没办法约分。。<br /> <br />看了标程才知道原来还可以这样做:<br />把取模的数进行分解质因数,对于你要乘或者要除以某一个数的时候,将这个数和模的gcd额外处理(其实直接把质因数的几次幂记下来就可以了),对于不是gcd的部分直接乘法逆元即可。<br /> <br />我是参考的标程的写法(ps:标程跑得非常慢),加略微的改进,感觉我应该不会写丑啊。。。但是交到h8oj上面去的时候果断被虐了。。估计是还有更优美的算法,那位原创 2011-03-18 23:32:00 · 1876 阅读 · 1 评论 -
组合计数小启发
<br />在DP的领域中还有的很大一部分就是组合计数。<br /> <br />以前做了FHQ在集训队作业中的《连边》这道题,大概就是要你给一个图连边是的若干个点度数为奇数。<br />比较容易发现是一道DP题,但是怎样保证状态不重不漏?<br /> <br />常用的方法就是增维,比如按照排序大小扩展啦,按照字典序扩展啦从而使得状态不重,但是还有两种方法可以使得状态不重不漏,那就是除法和减法!<br /> <br />除法可能大家用的多,比如最常见的组合数就是利用的除法,从排列数除以N!,但是减法就比较原创 2011-05-20 21:04:00 · 1137 阅读 · 1 评论 -
【Baby-step giant-step Algorithm】poj3243,hdu2815
等下来填坑。。。program poj3243;const mom=1>1))mod mo; if odd(b) then fmul:=fm原创 2011-04-03 22:24:00 · 1604 阅读 · 0 评论 -
OJ记录(11.4.8)
<br />鄙人在h8oj上玩了几天,难题是一道也没有做出来。。。。<br /> <br />大概的总结下,一共有14道:<br /> <br />1.神题A+B problem(代码最短奖)<br />/************************************************************** Problem: 1000 User: ImSB Language: Pascal Result: Accepted Time:0原创 2011-04-08 22:50:00 · 3090 阅读 · 0 评论 -
【容斥原理+状态压缩】zjoi2009 多米诺骨牌
<br /><br />转送门:zjoi2009 多米诺骨牌<br /> <br /> <br />彻彻底底的被这道题虐了,想了一个月没想出来,最后和宇宙大总统一起强肯了2个小时标程算是看懂了。。<br />首先抛开这道题的那个奇怪的限制(没行列没有骨牌跨过),一个赤裸裸的骨牌覆盖我都不不知道怎么做啊!!<br />先看下赤裸裸的骨牌覆盖怎么做:<br />一般人的反映就会想到状态压缩DP,没错<br />状态为F【I,J】表示第i行的状态为J的方案数>>空间复杂度O(N*2^N),转移O(2^N),写的好原创 2011-04-19 22:50:00 · 3489 阅读 · 5 评论 -
OI犯2合集!
搞oi搞了这么就,难免有一些理解的不够透彻的地方,下面我就列举2个我严重犯2的地方,相信很多人也犯过和我一样的错误原创 2011-07-20 22:38:54 · 1537 阅读 · 0 评论 -
Codeforces Beta Round #88
做CF被血虐。。。下次要扳回来!AB题就pass吧,现在直接切入正题(A掉AB题我都花了1个小时啊,混蛋。。)C给你一个竞赛图,要你找一个三元环。solution竞赛图的意思就是 Aij≠Aji ,一直都忘记用这个性质,悲催。。下面讲一个我翻别人代原创 2011-09-24 14:54:32 · 1351 阅读 · 2 评论 -
【Pólya计数】hnoi2009图的同构计数
<br />题目的简单描述:计算出含有n(n<60)个点的无向图的本质不同的个数。<br />这里面本质不同的概念是一个图通过改变一些点的序号可以变成其他的图。<br /> <br />刚开始看这道题是晕的,60的范围很让人蛋疼,搜索?DP?记得以前在LTC男人八题里有一道有N个点的连通图的个数,但是这道题所有点是一样的,就涉及到了同构的问题。是通过非常巧妙的状态DP?还是通过等价类的搜索?<br /> <br />后来问了道长是Pólya计数。。比较无语的是,我看见这道题第一个排除的算法就是Pólya,他原创 2010-11-06 16:05:00 · 2188 阅读 · 0 评论 -
【网络流专题】
<br />最近做了两道网络流神题,里面用了几个非常巧妙的技巧,在今后很多题目中都可以使用得到。<br />第一题:WC2007石头剪刀布<br /> 这题是网络流,简直太难想到了,总之这道题有几个非常巧妙的转化。<br /> 首先是补集转化,我要统计一个完全有向图中的三元环的个数,就等于所有环的个数-非三元环的个数。非三元环的个数怎么统计呢?观察三元环的特点,发现一个三元环必然有一个点在这个环中入度为二(出度为二),由此我们便可以得到一个计算三元环的公式(设d[i]为i的入度)<br原创 2010-10-24 23:49:00 · 1137 阅读 · 0 评论 -
【基于归并排序的分治】统计问题
题目是这样的:给你一个N*N的矩阵,可以完成两个操作 1.修改某个格子的权值;2.查询某个矩形的权值。看到题目以后很快想到的是二维树状数组,但是N不过既然有这种题目,那么就一定是有解决办法的,在线算法不行,可以考虑离线算法,这个离线算法应该怎么做呢?深入考虑这道题,发现他相当于是要满足在3个偏序集的基础上进行统计---时间、x坐标、y坐标,怎样才可以满足条件呢?对于2个偏序集,我们常用的方法是对其中某一个偏序集进行排序使其成为全序集,再用数据结构统计另一个偏序集。3个应该怎么办?(看了题解后)应该原创 2010-10-24 19:27:00 · 1420 阅读 · 3 评论 -
【序列之神splay】poj3580
首先借助Google大叔吧这道题看懂了。和【noi维护数列】比较相像,可以说是其简化版本,需要维护的东西少一点,操作要多一个。简要的来说,他是要支持者样几种操作: 1.插入删除; 2.翻转一段选定的序列; 3.交换两段相邻的序列; 4.一段全部增加k; 5.询问一段的最小值。前一段时间学习了一下Splay,亮点就在与Splay操作,由此便可以对区间进行划分,比如对于以上操作(首先插入个极大点和极小点): 1.插入 j 到 i 后面:原创 2010-07-19 23:07:00 · 3136 阅读 · 2 评论 -
关于降维的技巧
<br />关于降低复杂度的题目挺多的,这段时间碰到了这样一道挺有意义的题目:<br /> 给你四个排名,要求你统计出至少三次比同一个人排名低的人数(人数<=100000);<br /> <br />平方的复杂度谁都想得到的,但小于平方的复杂度一时半会还真没想到,看了题解以后才发现原来还可以这样:<br />四个排名不好做,我先枚举哪一个排名不看,那么题目就转变成三个排名,统计每次都比某一个人低的人的个数。<br />首先按第一个排名为关键字扫描,利用树状数组维护一个最小值,使得第二个排名为下标,原创 2010-07-22 22:05:00 · 1292 阅读 · 5 评论 -
【高斯消元解xor方程组】poj1830
poj1830,为数不多的中文题啊!我不用去请Google大仙了。题目描述有N个相同的开关,每个开关都与某些开关有着联系,每当你打开或者关闭某个开关的时候,其他的与此开关相关联的开关也会相应地发生变化,即这些相联系的开关的状态如果原来为开就变为关,如果为关就变为开。你的目标是经过若干次开关操作后使得最后N个开关达到一个特定的状态。对于任意一个开关,最多只能进行一次开关操作。你的任务是,计算有多少种可以达到指定状态的方法。(不计开关操作的顺序)嗯,对于每个灯泡,所有会影响到他的开关(改变为1,不改变为0)的异原创 2010-07-20 20:48:00 · 2055 阅读 · 1 评论 -
【后缀数组+单调队列】省队集训题istring
哎,oi生涯也有一年了,竟然不知道后缀数组这种牛B的东西,啊~~~可能是受到了后缀树的影响(一直分不清后缀树和后缀数组),对于串的理解一直停留在KMP和扩展KMP上,现参读了罗穗骞牛的《后缀数组——处理字符串的有力工具》,狠下心来研究了一番,发现串竟然是一个如此美妙的结构。简要的说一下自己对后缀数组的理解: 定义suffix(i)为主串A1~length(A)的子串Ai~length(A)。 我们现在对所有后缀suffix(1),suffix(2),suffix(3),......,su原创 2010-07-30 01:55:00 · 2091 阅读 · 0 评论 -
8月7日水题记录
<br />下午睡太早导致晚上睡不着。。。。<br />半夜三更爬起来准备做题目,但是由于最近久攻一道难题不下,很是郁闷,遂冒出了想刷水题的记录=、=。<br /> <br />从1.00到5.00一共刷了6道水题,效率不高不低,总之刷的心情还是蛮愉快的。总结本来不想写了(向总:Liong den 啊,你又欠我总结了啦),但是觉得虽然是水题我却也被水了几下,好吧,还是写写。。。<br />刷的大都是poj的中文题,E文不好省得翻译了。。。<br /> <br />1.poj1062昂贵的聘礼<br />原创 2010-08-07 07:26:00 · 972 阅读 · 1 评论 -
【AC自动机】基于自动机状态设计的动态规划
<br />AC自动机 自动AC机,嗯希望是这样。。。<br /> <br />知道了AC自动机的工作原理之后,我不得不发出感慨,这真是个十分漂亮的算法,无论是在时间上还是空间上亦或是常数上,都有非常出色的表现。<br />AC自动机的基本操作就是多串匹配,最朴素的思想就是跑N边KMP,复杂度是O(NM)的,AC自动机则可以O(M)内岀解。<br /> <br />关于AC自动机的介绍,非常感谢这位大牛,他这里讲的非常清楚,AC自动机就是字典树和KMP的结合版本,这里贴出自己的AC自动机的代码:<br />原创 2010-08-12 23:23:00 · 1727 阅读 · 1 评论 -
【noi2009】管道取珠
<br />实现非常简单,但决不能说是一道水题!<br /> <br />今天兴致大发刷起了noi2009的题目,最后被这道题卡住了,冥思苦想了整整2个小时最后果断决定看题解。<br />看到了题解的前K个字(k≤100)我就不禁捶胸顿足了:果然好题啊,太巧妙了!<br /> <br />题目大意是这样子的:<br /> 有a,b两个01串,现在这两个串相互穿插形成串c,假设两个串可以形成的串的集合为C,求∑{num[c]2}(c∈C)。<br /> <br />这个平方很是折磨人啊!但是如果这样定义状态原创 2010-08-28 23:45:00 · 1525 阅读 · 0 评论 -
【noi2005】维护数列
哎呀,不早了,这道题从9点调到了11:30,总之这道题和之前的【poj3580】非常相似,很欣慰的是这次编写的时候思维非常连贯,一口气写完,debug了2个小时发现一直是读入萎了~~,不知道我的数据是不是noi官网的,总之有些点和题目描述的不一样,比如说GET-MAX操作后面诡异的给我来了几个空格,我就一直在201和215之间徘徊。 依然是裸的splay,发现这次的时间有一些惊险,某个点我要8S才跑得出来,(ms时限有10S),开了release以后神速!每个点都不超过2S,很奇怪啊。原创 2010-08-30 00:33:00 · 2973 阅读 · 6 评论 -
【noi2005】智慧珠游戏
noi2005的题不得不说太重口味了,三道神题(维护数列、智慧珠游戏、月下柠檬树)想AC?那好,交出至少5KB的程序吧,怪不得300+就有金牌了。题目大意很简单,类似于七巧板,你有12种骨牌,其中3联骨牌1个,4联骨牌3个,5联骨牌8个,现在给你个残局,要求你用剩下的骨牌填满棋盘,棋盘是个10*10的三角形。我想应该没有什么牛人用状态压缩DP做出来了吧?那好,这就只能搜索了。开始是不想做这道题的,但是看到STD如此之慢(GHY一共是要1S+),徒生出虐STD的想法,可能知道的人不多,解决覆盖类问题有一神级算原创 2010-08-31 21:37:00 · 3053 阅读 · 3 评论 -
【math】同余模方程组
这几天小机房选拔考试,向总很神奇的拿来了三套大约为省选难度的试题,嗯,这些题都很经典。这道题的大意是这样的:给你P个N阶置换,你必须按顺序合成这些置换(1,2,..N,1,2,3,..,N,1,2,3)成为一个单位元,求最少合成步数。(N,P<200)这道题数据大水导致我一个模拟+cheat全过。。其实是很不错的一道题,具体做法如下:考虑ans mod p = y,ans=p*x+y ,可知前面这P*X个置换合成的置换和后面Y个置换合成的置换互为逆元,那我们枚举Y,就可以知道前P*X个置换该合成什么置换,然原创 2010-09-05 08:26:00 · 1129 阅读 · 0 评论 -
【poj2008】奇怪的优先队列
<br />题目意思很简单:平面上有N(N<1000)个点,用一个给定形状的直角三角形,求它最多可以覆盖多少个点?<br /> <br />可以分析出题目的要求是O(N2)的算法。<br />此题很快可以得到一个O(N2logN)的算法,通过对每个点经过以直角边的斜率为斜率的直线的截距排序,再使用树状数组统计。<br /> <br />这道题O(N2)的算法非常有创意!除了之前想到的通过对每个点经过以直角边的斜率为斜率的直线的截距排序,我们在继续通过Y轴排序,然后我们再加入对Y轴排好了序的满足条件的点,通过原创 2010-09-20 21:54:00 · 1094 阅读 · 0 评论 -
【动态树】poj2763
<br />题目大意:<br /> 给你一个无根树,要求满足两个操作:<br /> 1.查询两个点的距离;<br /> 2.修改某一条边的权值。<br /> <br />正确做法是用线段树维护一个DFS序列,因为想温习下动态树所以很NC的编了个动态树。<br /> <br />较之之前的动态树,这里多得操作是查询两个点的距离。<br />由于死循环TLE了1次之后AC。<br />很无解的,常数巨大的动态树竟然也可以超过绝大多数的线段树:<br /> <br />program原创 2010-09-22 00:41:00 · 1567 阅读 · 0 评论 -
【动态树】poj3237
题目大意: 给你一颗树,要求支持下列3个操作: 1.询问两点之间路径的边中边权最大的; 2.把两点之间的路径的边权全部取反; 3.修改某条边的边权。最近想强化下动态树(路径剖分就算了,又慢又丑),spoj上有4道qtree,只可惜家里上spoj太慢。。ms pku3237这道题比qtree4的操作还多一点。编了2个小时,花了半个小时调过了样例,交上去TLE了,估计是死循环,写了个数据生成器,发现是数组没清0;之后又WA了一次,有个特殊情况没判到,就是点A是点B的祖先,之后就A原创 2010-09-22 15:33:00 · 1935 阅读 · 0 评论 -
【可并堆的应用】poj3016
能找到的关于可并堆的题目实在是太少了,在网上进行搜刮之后只找到poj3016这一道题目。迄今为止我知道可并堆的唯一作用就是解决这样一个问题:求把一个序列改成不下降序列的最小费用(费用是指各项之差的绝对值的sigma)。解决这个问题使用的是贪心算法,在HHY的论文中关于可并堆和怎样解决这个问题都有非常详细的说明,并且介绍了一个简单可行的算法,算法流程如下:S1:对于当前我扫描到的序列的第i项,新建一个仅包含他自己的区间;S2:如果当前栈顶的区间的中位数如果不小于前一个区间的中位数,则执行S4;S3:合并栈顶以原创 2010-09-29 23:17:00 · 2311 阅读 · 6 评论 -
【决策单调性的动态规划】noi2009诗人小G
关于决策单调性在网上有一篇非常好的论文----.O(N^2)的算法想必大家一定秒出了,可以发现这道题所用的方程是个经典1D1D方程:f[i]=min{f[j]+cost[i,j]};那么我们的任务就是证明决策单调性在直接套用模板即可,所谓决策单调性,就是我们要证明这样一个命题:如果 f[k]的最优决策是j,f[k-1]的最优决策是i,(ik),使用j转移都会比使用i转移优,对于所有f[l](l首先我们可以得到的已知条件是使用i转移f[k]比使用j转移f[k]要优,j转移f[k+1]比使用i转移f[k+1]要原创 2010-10-09 00:07:00 · 5272 阅读 · 1 评论 -
TC SRM520 div1
好悲惨啊。。。俺爆0了。。还好没有去cha错别人,要不然就负分了。。第一题暴力枚举吧,暴力枚举都写错了,被一哥们cha掉了~~第二题我打算用荣斥原理做比较方便,先不考虑有从1~ P[X]的限制,令cal(I)=C(I-1,2),G[I]=cal(i原创 2011-10-05 01:02:21 · 1272 阅读 · 0 评论