procedure2012
It's not worth it to know you're not worth it!
03 2012 档案
[NOI2003 文本编辑器]
摘要:[关键字]:splay[题目大意]:也不说了……太麻烦了……//==============================================================================[分析]:就是NOI2005序列维护的简化版,不用维护太多信息、不用延迟……但是要注意要判断从当前光标往后走n各是否超出了当前文本的范围,特殊判断一下查出范围就当只查到最后一个就行了。听说输出时如果用中序遍历有可能爆栈但是本弱菜不会高级做法,直接递归遍历在tyvj上已经ac。[代码]:View Code #include<iostream> #include< 阅读全文
posted @ 2012-03-30 23:00 procedure2012 阅读(715) 评论(0) 推荐(0)
[NOI2005 维护序列]
摘要:[关键字]:splay[题目大意]:太麻烦了自己找题看吧。//=============================================================================[分析]:就是一些基本的splay操作。将一个区间[a,b]从splay树中取出来要先将a-1旋到根b+1旋到根的右子树,然后以根的右树的左树为根的子树就是区间[a,b]。每个splay树中的节点要保存:数值dat,子书大小size、sum区间和、maxsum最大子段和,mls从左开始连续的最大子段和,mrs同样;same是否要改为普通值,rev是否需翻转。同时为了免去NULL的判 阅读全文
posted @ 2012-03-30 22:42 procedure2012 阅读(593) 评论(0) 推荐(0)
[后缀数组小结]
摘要:最长公共前缀:LCP(i,j)=lcp(sa[i],sa[j])=height数组中的i+1,j的最小值RMQ解决。可重叠最长公共子串:height整个数组中的最大值不可重叠最长公共子串(pku1743):先根据二分的答案k对height数组分组,若有一组中sa[]的最大和最小值的差大于等于k就说明k成立。可重叠的k 次最长重复子串(pku3261):二分答案判断是否有任意一组中有超过k各后缀。//=====================================================================================不相同的子串的个数(spoj 阅读全文
posted @ 2012-03-29 23:12 procedure2012 阅读(322) 评论(0) 推荐(0)
[POJ2491 Scavenger Hunt、POJ2643 Election]
摘要:[关键字]:STL中map的应用[题目大意]:因为是两道题就不一一写了,自己看吧都很水。//================================================[代码]:因为很水而且只是为了练习一下map所以没有分析直接上代码了POJ2491#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<string>#include<map>using n 阅读全文
posted @ 2012-03-29 22:14 procedure2012 阅读(170) 评论(0) 推荐(0)
[POJ1226 Substrings]
摘要:[关键字]:后缀数组 字符串[题目大意]:给定n 个字符串,求出现或反转后出现在每个字符串中的最长子串。//=========================================================================[分析]:和前几道题一样的做法,先见字符串和它反转后的串连在一起并用不同的字分割(小于原串的任意字符且不相同)最后加上一个最小的字符结束,再求后缀数组,二分答案对height数组分组判定是否有至少一组后缀包含所有字串。[代码]:View Code #include<iostream>#include<cstdio>#in 阅读全文
posted @ 2012-03-29 22:10 procedure2012 阅读(343) 评论(0) 推荐(0)
[SPOJ220 Relevant Phrases of Annihilation]
摘要:[关键字]:后缀数组 字符串[题目大意]:给定n 个字符串,求在每个字符串中至少出现两次且不重叠的最长子串。//======================================================================[分析]:做法和POJ3294大同小异,也是先将n 个字符串连起来,中间用不相同的且没有出现在字符串中的字符(且小于它们)隔开,最后加上一个最小的数求后缀数组。然后二分答案,再将后缀分组。判断的时候,要看是否有一组后缀在每个原来的字符串中至少出现两次,并且在每个原来的字符串中,后缀的起始位置的最大值与最小值之差是否不小于当前答案(判断能否做到不重 阅读全文
posted @ 2012-03-29 21:57 procedure2012 阅读(334) 评论(0) 推荐(0)
[POJ3294 Life Forms]
摘要:[关键字]:后缀数组 字符串[题目大意]:给定n 个字符串,求出现在不小于k 个字符串中的最长子串。//======================================================================[分析]:先将所有字符利用不同且小于所有原字符串中的字符的字符分开,但最后一个字符后面要加上一个小于所有字符的字符。然后二分答案并对height数组进行分组,判断每组后缀数否分在了k个字符串中。输出时就把分在k个字符串中的后缀组输出。[代码]:View Code #include<iostream>#include<cstdio> 阅读全文
posted @ 2012-03-29 21:37 procedure2012 阅读(1557) 评论(0) 推荐(0)
[URAL1517 Freedom of Choice]
摘要:[关键字]:后缀数组 字符串[题目大意]:给定两个字符串A 和B,求最长公共子串。//==============================================================================[分析]:求两个字符串的最长公共子串实际上就是求两个字符串的两个后缀的最长公共前缀。所以把两个字符串连起来中间用一个没出现的字符(小于任何一个原字符串中的字符)连起来,最后再加上一个字符(小于任何一个字符)。然后求这个新串中的最长公共前缀,依次枚举每个i求出符合sa[i-1]在一串,sa[i]在二串的所有height的最大值。[代码]:View Code 阅读全文
posted @ 2012-03-29 18:59 procedure2012 阅读(282) 评论(0) 推荐(0)
[URAL1297 Palindrome]
摘要:[关键字]:后缀数组 字符串[题目大意]:求出给定字符串的最长回文串。//========================================================================[分析]:首先把字符串反转(T')接到原串(T)后边中间用‘~’分割(大于所有字符串中元素就行),最后用'$'结束(小于所有字符)。然后枚举T串中的每一个位置i找到T'中对应的位置i'假设以i为中心有一个长度为2r的回文串,那么T[i-r,i-1]=T[i+1,i+r]=T[i'+1,i'+r](画一下就明白了)。所以找以i 阅读全文
posted @ 2012-03-28 11:43 procedure2012 阅读(326) 评论(0) 推荐(0)
[SPOJ694 Distinct Substrings]
摘要:[关键字]:后缀数组 字符串[题目大意]:给定一个字符串,求不相同的子串的个数。//=======================================================================[分析]:如果所有的后缀按照suffix(sa[1]), suffix(sa[2]),suffix(sa[3]), ……,suffix(sa[n])的顺序计算,不难发现,对于每一次新加进来的后缀suffix(sa[k]),它将产生n-sa[k]+1 个新的前缀。但是其中有height[k]个是和前面的字符串的前缀是相同的。所以suffix(sa[k])将“贡献”出n-sa 阅读全文
posted @ 2012-03-28 11:29 procedure2012 阅读(383) 评论(0) 推荐(0)
[POJ3261 Milk Patterns]
摘要:[关键字]:后缀数组 字符串[题目大意]:给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠。//==========================================================================================[分析]:先二分答案判断有没有至少出现k 次的长度为x的重复子串。因为可以重复所以只要heighe数组中有>x说明有长度为x的可重复子串,然后再根据height分组:如果height[i]<x就把i和上一组分开,这样每一组里都存在长为x的重复字串,如果有任意一组里有超过k个,说明成立。[代码 阅读全文
posted @ 2012-03-28 11:18 procedure2012 阅读(756) 评论(0) 推荐(0)
[POJ2420 A Star not a Tree?]
摘要:[关键字]:随机化搜索 模拟退火[题目大意]:给出n个点,找出一个距离所有点之和最小的点,输出距离。//===============================================================================[分析]:同样是随机化的方法,只是在把没个点随机移动时有小小的变动。poj1379是使用得随机一个角度x然后利用t*cos(x)和t*sin(x)来处理随机走到的位置,而这道题因为没有了边界的限制,可以用以2t为长以要移动的点位中心的正方形中随机一个移动的位置来求最优值。至于具体退火算法步骤可以看poj1379或http://www.c 阅读全文
posted @ 2012-03-28 10:42 procedure2012 阅读(963) 评论(0) 推荐(0)
[POJ1379 Run Away]
摘要:[关键字]:随机化搜索 模拟退火[题目大意]:在一个给定的矩形中有一些点,找到一个点距所有点的最小距离最短。//==============================================================================[分析]:用模拟退火的方法,其实不是标准的模拟退火因为出于时间等因素考虑,并没有加入以一定概率接受稍差解,而只有退火过程。大体步骤:1、随机出NUM个点2、枚举步长,并在此步长下让每一个随机的点随即移动一定次数并记录最优值。3、退火,步长减少。[代码]:View Code #include<iostream>#incl 阅读全文
posted @ 2012-03-28 10:20 procedure2012 阅读(499) 评论(0) 推荐(0)
[SGU280 Trade centers]
摘要:[关键字]:贪心[题目大意]:在一个有n个点的树中选若干个点建设交易中心,要求每个点到交易中心所经过的道路数不能超过k,求最少需要建几个交易中心分别在什么地方。//=========================================================================================[分析]:如果两个服务站之间的距离不大于2*k+1,那么这两个服务站之间的点都是可以被服务到的。这个时候我们先给叶子节点进行编号(编号表示一个点到其中特殊服务站的距离):设其编号为k+1。这样,保证了它下面的节点不会照顾到它,然后从叶子节点往上面操作。每次考 阅读全文
posted @ 2012-03-24 22:41 procedure2012 阅读(406) 评论(0) 推荐(0)
[SGU220 Little Bishops]
摘要:[关键字]:动态规划[题目大意]:在一个n*n的棋盘里放k个主教(象),问使它们不能互相攻击的摆放方案有多少种。//==================================================================[分析]:其实不难但我没想到。首先玩过象棋的都知道黑象是吃不到白格里的,反之亦然。所以只要枚举在白格里放i个*黑格里放k-i个累加就行了。但是如何求出来呢?如果把整个棋盘旋转45度主教的行走路线就不再是斜线而是直线!他们变成了车!然后可以动态规划之:f[i][j]=f[i-1][j]+f[i-1][j-1]*(t-(j-1))前i行放j个的方案数,t 阅读全文
posted @ 2012-03-24 22:30 procedure2012 阅读(476) 评论(0) 推荐(0)
[SGU Little Queens]
摘要:[关键字]:搜索 位运算[题目大意]:在一个n*n的棋盘里放k个王后,问使它们不能互相攻击的摆放方案有多少种。//==================================================================[分析]:就是n皇后问题的稍微变形,但要加上位运算优化。具体可以看matrix67神牛的博文。[代码]:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm&g 阅读全文
posted @ 2012-03-24 22:10 procedure2012 阅读(176) 评论(0) 推荐(0)
[SGU219 Synchrograph]
摘要:[关键字]:图论 其他 反向思维[题目大意]:给出一个n个点m条边的有向图,初始时每条边都是非负数。如果一个点所有的入边的权值都是正整数,那就称它为激活的(或没有入边)。对这个图的操作时呈周期的,每个周期任意选一个已激活的点进行“fire”操作:入边权-1出边权+1,然后更新激活节点。如果一个点可以通过一系列“fire”操作激活自己那称它为“potentially alive”,如果一个点在任意次“fire”后仍旧是“potentially alive”那就称它是“alive”,问每个点是否是“alive”。[分析]:要运用反向思维的方式去想,如果初始时有一条入边是0,那就看上一个点如果也有一 阅读全文
posted @ 2012-03-23 23:12 procedure2012 阅读(327) 评论(0) 推荐(0)
[SGU223 Little Kings]
摘要:[关键字]:动态规划[题目大意]:在一个n*n的棋盘里放k个王,问使它们不能互相攻击的摆放方案有多少种。//==============================================================[分析]:状态压缩动态规划,类似于炮兵阵地。方程:f[i][j][k1]=Σf[i-1][j-b[k1]][k2],表示前i行放j个王第i行状态是k1,i-1行状态时k2时的方案数。k1是利用二进制表示的这一行的状态,1表示有王0表示没有王。转移时要判断:(k1&k2)==0 ((k1<<1)&k2)==0 ((k1>>1)& 阅读全文
posted @ 2012-03-23 22:27 procedure2012 阅读(190) 评论(0) 推荐(0)
[SGU222 Little Rooks]
摘要:[关键字]:数学 组合计数[题目大意]:在一个n*n的棋盘里放k个车,问使它们不能互相攻击的摆放方案有多少种。//====================================================================[分析]:一开始推了半天递推公式也没解决了判重等一系列问题。然后在仔细一看题,太简单了……首先每一行每一列只能有一个车,所以找出k个车所摆放的k行k列总共有C(n,k)2种方案数,而在这k行k列中车的摆放方案共有k!种,所以最后答案就是C(n,k)2*K!(注意用int64)。[代码]:View Code #include<iostream& 阅读全文
posted @ 2012-03-23 22:12 procedure2012 阅读(251) 评论(0) 推荐(0)
[SGU200 Cracking RSA]
摘要:[关键字]:数学 高斯消元 异或方程组[题目大意]:给出m个数,保证每个数的质因数都不超过第t大的质数。从中选出若干数使其乘积为完全平方数,问有多少选择方法。//=================================================================================[分析]:首先可以想到如果一个数是完全平方数那它的所有质因数的指数都应该是偶数。根据这个可以列出方程组:a11*x1+a12*x2+……+a1n*xn=d1%2=0a21*x1+a22*x2+……+a2n*xn=d2%2=0……at1*x1+at2*x2+……+atn*xn= 阅读全文
posted @ 2012-03-22 18:41 procedure2012 阅读(240) 评论(0) 推荐(0)
[SGU102 Coprimes]
摘要:[关键字]:数学 数论 公约数 欧拉函数[题目大意]:给出一个整数n,求出<=n的与n互质的数的个数。//================================================================================================[分析]:欧拉函数就是求出小于等于x的互质的数有几个。公式:φ(x)=x*(1-1/p1)*(1-1/p2)*......*(1-1/pn),其中pi是x的质因数。性质:1、φ(x)=x-1,其中x为指数 2、φ(xy)=φ(x)*φ(y),其中gcd(x,y)=1根据性质可以找出在O(n)复杂 阅读全文
posted @ 2012-03-22 18:24 procedure2012 阅读(242) 评论(0) 推荐(0)
[NOI2006 最大获利]
摘要:[关键字]:图论 网络流 最大权闭合图[题目大意]:有n个地方可以建中转站花费不同,有m个顾客群每个顾客群会利用a,b中转站,收益为c,问最大获利。//=============================================================================================[分析]:最大权闭合图的典型例题,据说是NOI第一道网络流的题目,可以先看一看《航空计划》这道题。首先可以看成n+m个点,每个点有一个权值,有些是正(收益)有些是负(花费)。有些点依赖于其他的点,由依赖的点向被依赖的点连边就构成了一个最大权闭合图,然后利用网络流 阅读全文
posted @ 2012-03-21 08:34 procedure2012 阅读(1385) 评论(0) 推荐(0)
[NOI2008 志愿者招募]
摘要:[关键字]:图论 网络流[题目大意]:有n天每天需要ai个志愿者,有m种志愿者每种可已从第xi天干到第yi天花费为ci(不是志愿者吗),问最小花费。[分析]:弱菜没做出来,Orz BYvoid神牛http://www.byvoid.com/blog/noi-2008-employee/[代码]:View Code #include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<queue>usin 阅读全文
posted @ 2012-03-21 08:15 procedure2012 阅读(1707) 评论(0) 推荐(0)
[NOI2008 假面舞会]
摘要:[关键字]:图论 公约数 找环和链[题目大意]:有K类面具,第i类只能看见属于第i+1类的编号的面具,现给出一些可以看见的面具的信息,问最多和最少有多少面具。//===========================================================================================================[分析]:一开是想到了这些信息一定可以被连成一些环和链。如果有环那链一定就没有用了,怎样求出环中最大最小的种类数呢?一开是没仔细想好题以为只能出现一个环,后来看了题解可以出现多个环,而所有环的公约数就是可行的k,所以在有环的 阅读全文
posted @ 2012-03-21 08:12 procedure2012 阅读(1231) 评论(0) 推荐(0)
[NOIP2004 虫食算]
摘要:[关键字]:搜索[题目大意]:不说了,自己找吧……//===================================================================[分析]:首先按照字母出现的顺序进行搜索,搜索每个字母分别代表什么数字。在每次搜索时都要剪枝,就是把当前的已知字母带到竖式中算一遍,如果出现矛盾情况就剪枝。矛盾情况就是:1、同一列三个数都已知但(a+b)%n!=c2、已知两个数但计算出的第三个数已经被其他字母占用。注意这里要处理进位的情况。[代码]:View Code #include<iostream>#include<cstdio> 阅读全文
posted @ 2012-03-18 20:48 procedure2012 阅读(1975) 评论(0) 推荐(0)
[USACOContest2010 慢慢游]
摘要:[关键字]:数据结构 DFS序列[题目大意]:有一棵树,每头牛从一号节点出发走到另一个节点上。路径上每有一个有牛的节点,那他就会减慢一次速度,问每个牛会减慢多少次速度。//======================================================================================[分析]:首先对树进行先序遍历,然后对每个节点编号记录每个节点v进入时的编号x和它所有子树中编号最大的那个y,这样以v为根的子树就对应了一段连续的区间。每有一个牛走到他所对应的节点v上,v的子树上所有节点的减慢次数就会+1,然后就可以利用树状数组来进行连续 阅读全文
posted @ 2012-03-18 15:22 procedure2012 阅读(190) 评论(0) 推荐(0)
[POJ1389 Area of Simple Polygons]
摘要:[关键字]:数据结构 线段树 扫描法[题目大意]:给出n个矩形的左下角和右上角,求出所有矩形面积的并。//==========================================================================[分析]:可以用扫描法来求,首先将所有y值离散化然后建立线段树(用来求所有竖直的边的并),在把所有矩形都变成两条线——左边和右边,然后左边需要被加入线段树,右边代表退出线段树,并以x为关键字排序。从左到右枚举每一个边加入这样当前边的x1和上一条加入的边x2之间一定是一个矩形,而这个矩形的一边是x2-x1,另一边就是所有在线段树中的边的并,这样只 阅读全文
posted @ 2012-03-17 17:42 procedure2012 阅读(378) 评论(0) 推荐(0)
[POJ2195 Going Home]
摘要:[关键字]:图论 二分图最佳匹配[题目大意]:给出n*m的地图,由几个H(房子)和m(人),求每个人都走到一个房子的最少需要的总步数。//============================================================================[分析]:这道题是二分图最大匹配的应用。先把边权取负然后就是求一个边权最大的匹配。利用KM算法求解,具体:http://blog.sina.com.cn/s/blog_625c774e0100hhh7.html[代码]:View Code #include<iostream>#include< 阅读全文
posted @ 2012-03-16 21:58 procedure2012 阅读(673) 评论(0) 推荐(0)
[NOI2009 变换序列]
摘要:[关键字]:图论 二分图匹配[题目大意]:太麻烦,就不说了//=========================================================================[分析]:因为每个距离都对应着两个数字——就是+d或-d,这样0~n-1和它所转换的序列可以看成一个二分图的模型,而一个完备匹配就对应着一个序列。只要求一遍最大匹配看是否等于n。而字典序的问题,因为用匈牙利算法找增广路就是找到第一个没有被匹配或和它匹配的点可以找到另外一条增广路的点,这样每次都是将已经匹配过的点所匹配的点编号变大,如果倒着找匹配就恰好能保证序号越小就越可以找到编号小的点匹配 阅读全文
posted @ 2012-03-16 19:55 procedure2012 阅读(796) 评论(0) 推荐(1)
[POJ2376 Cleaning Shifts]
摘要:[关键字]:贪心[题目大意]:给出一给大区间和n各小区间,问最少可以用多少小区间覆盖整个大区间。//=========================================================================[分析]:贪心法来求。设t为当前所有已确定区间的最右端,那我们可以每次都取所有可选的小区间(左端点<=t+1)中右端点最大的值,然后更新最右端点ans++。初始时t=0.而由于如果有解t的值是递增的,那每次选区的区间的左端点也必然是递增的,所以可以先排序然后一遍扫描。[代码]:View Code #include<iostream># 阅读全文
posted @ 2012-03-15 21:14 procedure2012 阅读(1659) 评论(1) 推荐(0)
[POJ3836 P2P File Sharing System]
摘要:[关键字]:模拟[题目大意]:模拟一个P2P 下载,每对机器都有一个传输速率,每一个机器都有在线和离线时间,和下载的开始时间,当一个机器开始下载时,它将从所有在线且提供下载且与他有速度的服务器上下载。当它下载完成时,下一秒它就变成了服务器。问T时间之后,各个机器的完成百分比是多少。//=====================================================================================[分析]:枚举每一秒直接模拟这一秒有那些电脑可以下载并枚举那些服务器可以下载,然后更新下载量。如果以下载完就把他标记成服务器。[代码]:View 阅读全文
posted @ 2012-03-15 20:47 procedure2012 阅读(190) 评论(0) 推荐(0)
[POJ1083 Moving Tables]
摘要:[关键字]:模拟[题目大意]:一共有400个房间分布在走廊两侧,一侧是1、3、5、7……399另一侧是2、4、6、8……400,有多个操作要求从一个屋子搬一张桌子到另一个屋子如果两个操作占用了一段公共走廊则不能同时进行,每进行一组操作花费十分钟,问最小花费。//========================================================================================================================[分析]:一开始想歪了导致这么简单的题都做了半天。可以想到如果某一段走廊有超过以次操作那么这些操作 阅读全文
posted @ 2012-03-15 07:48 procedure2012 阅读(234) 评论(0) 推荐(0)
[HDU3264 Open-air shopping malls]
摘要:[关键字]:数学 计算几何[题目大意]:给出若干个互相分离的园,要求找到一个最小的半径使得每个圆都被以这个为半径以给出的某个圆圆心为圆心的圆覆盖至少一半。//============================================================================================================================[分析]:首先枚举每个圆的圆心作为圆心,在二分半径并判断是否符合要求。这样找出每个圆为圆心的半径的最小值,问题就在与怎样判断是否符合要求。相离、外切、内切、内含都好判断,但是相交情况怎样判断面积 阅读全文
posted @ 2012-03-15 07:40 procedure2012 阅读(277) 评论(0) 推荐(0)
[HDU3284 Columbus’s bargain]
摘要:[关键字]:图论 最短路[题目大意]:哥伦布需要买n件东西,每件东西可以通过如下四种方式:1、金币买。2、用一个玻璃珠(一共有无数个)代替一个金币再用金币买。3、等价的货物交换.4、用便宜的物品换再用金币买。问每件物品的最小价格以及有多少件物品的最小价格=其他两件物品价格和。//==================================================================================[分析]:首先2是必定要用的策略,所以把所有商品的初始价格都减一。然后对于每种4都要另一条边从便宜的到贵的权值是需要多加的金币数。这时有一个源点的问题,到底 阅读全文
posted @ 2012-03-15 00:30 procedure2012 阅读(251) 评论(0) 推荐(0)
[ZOJ2770 Burn the Linked Camp]
摘要:[关键字]:图论 差分约束系统[题目大意]:给出n个军营,每个军营最多有ci个士兵,且[ai,bi]之间至少有ki个士兵,问最少有多少士兵。//========================================================================================================[分析]:明显的差分约束系统的题目,网上关于这类题目的总结非常多但是又非常乱各执一词,建议每个人就认准一种讲法仔细研究实践,我推荐这篇博客:http://imlazy.ycool.com/post.1702305.html,讲的非常清楚。看完之后就 阅读全文
posted @ 2012-03-14 17:25 procedure2012 阅读(425) 评论(0) 推荐(0)
[HNOI2003 多边形]
摘要:[关键字]:计算几何 数学[题目大意]:找出给定的简单多边形的核的面积。//====================================================================================[分析]:一个裸的求半平面交的题目,可以用来练习模板。O(n2)算法:每次枚举一条边去切割当前剩余的多边形,直到所有边都枚举过一遍,剩余的多边形面积可以用三角剖分,然后利用叉积求出每个三角形的有向面积累加。[代码]:View Code #include<iostream>#include<cstdio>#include<cs 阅读全文
posted @ 2012-03-13 10:41 procedure2012 阅读(264) 评论(0) 推荐(0)
[HDU3262 Seat taking up is tough]
摘要:[关键字]:枚举 模拟[题目大意]:n*m的矩阵,每个矩阵有一个舒适值,给出每个学生进入教室的顺序和它需要占的位子数,只能占连续的一个横条最左边的是他的位置,每次都占他的位置舒适度最大。如果不够则只占它自己的位置,输出他所在的位置的坐标,如果一个位置都不剩就输出-1。//========================================================================================================[分析]:枚举每一坐标作为自己的位置然后判断其后是否够,如果够就和当前最优指比较。如果都查完都不够就找到全图中可用的最大 阅读全文
posted @ 2012-03-13 10:33 procedure2012 阅读(300) 评论(0) 推荐(0)
[HNOI2006 Hero超级英雄]
摘要:[关键字]:图论[题目大意]:有n道题只能按顺序回答,每到题只能用两个锦囊中的一个,问最多答上多少道题。//=================================================================================================[分析]:一开始看着和一道POJ上的2-sat很像,想都没就开始做,然后我就2了……又仔细看了一遍2-sat的定义:(1)、有N各组每组只能出一个。(2)、某两个之间不能同时选。这道题明显不符和第一的条件,然后仔细一看居然是二分图!每到题想每个可以解开它的锦囊连边,然后求最大匹配。注意的是这道题是 阅读全文
posted @ 2012-03-12 07:50 procedure2012 阅读(624) 评论(0) 推荐(0)
[HNOI2006 Starswar星球大战]
摘要:[关键字]:并查集[题目大意]:有n个点m条边,要炸毁k个点,问按炸毁顺序炸毁每个点后有几个联通块。//==============================================================================================[分析]:正着做每次还要删边求联通块复杂度很高。而倒着做先吧所有点都干掉,然后并查集求出联通块个数,每次回复一个点然后合并联通块并更新当前答案,然后倒着输出答案。[代码]:View Code #include<iostream>#include<cstdio>#include< 阅读全文
posted @ 2012-03-12 07:40 procedure2012 阅读(173) 评论(0) 推荐(0)
[BZOJ1787 Meet]
摘要:[关键字]:LCA[题目大意]:求出一个集合点使树中三个点到这个点距离总和最小//=============================================================[分析]:无论怎么建树,这个集合点一定在这三个点两两的LCA之间,所以就转化成求LCA的问题,但这道题用离线的tarjan算法十分麻烦,所以就用的LCA转RMQ的在线算法。自我感觉代码写的相当给力:非递归+STL,可惜MLE……[代码]:View Code #include<iostream>#include<cstdio>#include<cstdlib> 阅读全文
posted @ 2012-03-11 23:31 procedure2012 阅读(187) 评论(0) 推荐(0)
[BZOJ1202 狡猾的商人]
摘要:[关键字]:并查集[题目大意]:有一本记录了n个月的账本,偷看了m次每次记住了一个区间[x,y]的和,问这本帐是否是假账。//===================================================================================[分析]:首先可以想到要判断假账必须是某个区间[l,r]出现了两个值——一个他给的值、一个依靠别的计算出的值。所以可以一个集合里面的点代表的一个连续的区间,如果两个点不在一个集合内就合并,否则判断前y个月的值-前x个月的值是否是给出的值。用g[x]记录x到他所在的集合最后一个点也就是他所在的连续区间最左边的 阅读全文
posted @ 2012-03-11 23:14 procedure2012 阅读(857) 评论(0) 推荐(0)
[APIO2012 巡逻]
摘要:[关键字]:动态规划[题目大意]:说也说不清楚//=====================================================================[分析]:k=1很好做就是求出最长链就行了,因为假如这条链后必定会产生环,而环上的点必定只需走一次,所以答案就是2*(n-1)-s,s就是最长链的长度。k=2时也可以求最长链,由k=1时可以看出最长链的长度就是2*(n-1)需要减掉多少,于是把第一条链所经过的边变成-1再找一遍。第二种方法是动态规划,可以求出一棵树中k条不相交的链最长总合,而这道题中任意两条相交的链(a,b)\(c,d)都可以变成(a,c)( 阅读全文
posted @ 2012-03-11 22:50 procedure2012 阅读(608) 评论(0) 推荐(0)
[APIO2010 特别行动队]
摘要:[关键字]:动态规划 斜率优化[题目大意]:自己搜吧//===============================================================================[分析]:首先写出50分的程序,转移方程是:f[i]=max{f[j]+g(s[j]-s[i])}g()就是那个二次函数。然后将方程变形,设两个策略x、y(0<=x<y<i),若y一定比x优:f[x]+g(s[i]-s[x])<f[y]+g(s[i]-s[y])=f[x]+a*(s[i]-s[x])2+b*(s[i]-s[x])+c<f[y]+a*(s[ 阅读全文
posted @ 2012-03-09 17:40 procedure2012 阅读(900) 评论(0) 推荐(0)
[NOI2010 海拔]
摘要:[关键字]:图论 网络流[题目大意]:太麻烦,不写了……//==================================================================================================[分析]:先说80分的思路,其实所有点的海拔不是0就是1,因为可以通过修改让所有非0或1的海拔降低一定回减少费用。所以要求的就是在原图以左上为源以右下为汇求一个最小割。一开始无缘无故的WA,后来发现它输入的顺序是以y为第一关键字x为第二关键字,我写反了……在N天以后,终于搞定了AC解法。因为是平面图,所以可以转化成当前图的对偶图来做。所谓对偶 阅读全文
posted @ 2012-03-08 07:53 procedure2012 阅读(667) 评论(0) 推荐(0)
[NOI2010 能量采集]
摘要:[关键字]:数学 数论 公约数[题目大意]:太麻烦自己看题吧……//================================================================================================================[分析]:先说我自己的80分解法,枚举每个(x,y)然后因为这个点所在的直线就是:y=kx,k=(y/gcd(x,y))/(x/gcd(x,y))因为k要约分所以就是同时除以gcd(x,y)又因为所有点必须是整数,所以在这条线上的点数就等于x/(x/gce(x,y))=gcd(x,y)(因为从(0,0)开始 阅读全文
posted @ 2012-03-07 18:54 procedure2012 阅读(1034) 评论(3) 推荐(0)
[USACO4.3.4 Letter Game]
摘要:[关键字]:枚举[题目大意]:给出每个字母的分数,//================================================================================================================[分析]:一开始想了半天hash也没想对,这题居然枚举就能做。虽然给出的字典很大,但是其实有用的词很少。只要在读入字典时判断一下是否是由给出的字符中的一些组成,然后之久枚举超找最大值和词组就行。[代码]:View Code /*ID:procedure2PROB:lgameLANG:C++*/#include<io 阅读全文
posted @ 2012-03-06 08:09 procedure2012 阅读(319) 评论(0) 推荐(0)
[USACO4.4.2 Pollutant Control]
摘要:[关键字]:图论 网络流[题目大意]:在一个网络里求一个割,而且要保证(1)、容量最小(就是最小割)。(2)、满足医(1)的情况小边最少。(3)、满足(1)(2)情况下边的字典序最小。//=========================================================================================================================================[分析]:第一二问可以将每个边的权值c改成C=c*(M+1)+1,然后在求最小割maxf。第一问答案就是maxf/(M+1)第二问答案就是 阅读全文
posted @ 2012-03-06 08:02 procedure2012 阅读(353) 评论(0) 推荐(0)
[USACO4.2.3 Job Processing]
摘要:[关键字]:贪心[题目大意]:有多个A机器和多个B机器N个需加工物品,每个物品序先被某一A机器再被某一B机器加工,每个A机器和B机器都有不同的加工时间,求出A机器所需最小时间和B机器最小时间。//================================================================================================================[分析]:首先只考虑A,肯定是贪心来求最小时间和。每次都选最小时间然后在这个最小时间上加上它初始的加工时间,这样可以求出每个物品的costA[i],A时间和的答案就是max(cos 阅读全文
posted @ 2012-03-06 07:34 procedure2012 阅读(443) 评论(0) 推荐(0)
[USACO5.2.2 Electric Fences]
摘要:[关键字]:随机化[题目大意]:有一些平行与坐标轴的线段,找一个点到各线段距离和最小。//==================================================================================================[分析]:先找一个起始点(左下)然后确定一个范围,在这个范围内找到最优值,然后以最优值坐标为起点缩小范围重复,直到范围小于要求的精度。[代码]:View Code #include<iostream>#include<cstdio>#include<cstdlib>#inclu 阅读全文
posted @ 2012-03-03 18:42 procedure2012 阅读(261) 评论(0) 推荐(0)
[USACO3.4.3 Electric Fences]
摘要:[关键字]:数学 解析几何[题目大意]:给出n,m,p,问由(0,0)(n,m)(p,0)围成的三角形型内部有几个由整数构成的点。//=============================================================================================[分析]:据说有个皮克定律可以解决,但是本菜不会……所以就用了最笨的解析几何去做。计算出(0,0)和(n,m)构成的直线的解析式是:y=(xm)/n;(n,m)和(p,0)的解析式是:y=(p-x)m/(p-n)然后枚举x,求出对应的y。然后就可算出x这条直线上有几个可以选的点。 阅读全文
posted @ 2012-03-03 18:34 procedure2012 阅读(325) 评论(0) 推荐(0)
[USACO4.1.4 Cryptcowgraphy]
摘要:[关键字]:搜索 剪枝[题目大意]:有一种加密方式:在一个字符串中加入‘C’‘O’‘W’,并把‘C’和‘O’中间的字符和‘O’和‘W’之间的字符交换,给出一个字符串,看是否是“Begin the Escape execution at the Break of Dawn ”经过加密(有可能多次加密)。//===============================================================================================[分析]:搜索题但是剪枝很恶心,每次都找一组C、O、W然后解密继续找直到找完所有情况或找到目标。有如下几 阅读全文
posted @ 2012-03-03 18:22 procedure2012 阅读(322) 评论(0) 推荐(0)
[ZOJ3234 Protect the King]
摘要:[关键字]:计算几何 数学[题目大意]:给出N个点,求最多可以形成多少个同心多边形(就是圈套圈)。//==========================================================================================[分析]:因为要想构成最多的同心多边形那每个多边形必定当前可用的所有点中的凸包。然后就求凸包->删边->求凸包->……[代码]:View Code #include<iostream>#include<cstdio>#include<cstdlib>#includ 阅读全文
posted @ 2012-03-02 11:53 procedure2012 阅读(178) 评论(0) 推荐(0)
[2月做题总结]
摘要:[数学]:主要是计算几何方面有些代码的学习和规范(1)、叉积判断相交:[USACO3.4.1 Closed Fences](2)、叉积、点积、背包的代码规范以及多边形重心的求法:[HDU3685 Rotational Painting](3)、判断视野:[USACO3.4.1 Closed Fences]、[NOI2011 智能车比赛]还有高斯消元:[USACO3.2.4 Feed Ratios][动态规划]:(1)、状态压缩:[NOI2001 炮兵阵地](2)、矩阵+快速幂优化:[HNOI2011 DAY1 数学作业][数据结构]:(1)、Splay:[NOI模拟题7T2 Sort](2)、 阅读全文
posted @ 2012-03-01 18:42 procedure2012 阅读(186) 评论(0) 推荐(0)
[HDU3685 Rotational Painting]
摘要:[关键字]:数学 计算几何[题目大意]:给出一个多边形,判断有多少种稳定的摆放方法。//========================================================================================================================================[分析]:从物理角度分析,多边形的稳定方法就是重心的垂足落在支撑边以内(不含顶点),而因为有可能会有凹多边形出现所以支撑边一定是所有点的凸包的边。现在问题转化成了:(1)、求凸包:可以用Graham_Scan搞定(2)、求重心:这个比较麻烦 阅读全文
posted @ 2012-03-01 18:24 procedure2012 阅读(333) 评论(0) 推荐(0)
[HDU3683 Gomoku]
摘要:[关键字]:枚举[题目大意]:给出一盘五子棋局,判断在3步内是否有人能赢。//=============================================================================================================================[分析]:首先考虑第一步就有人赢的情况:枚举全棋盘所有可以放子的点判断在此处放一颗子后当前先手是否能赢;第二步才有人赢的情况:当前后手有两处地方可以保证走一步就能赢,因为如果只有一处,先手可以在此放子,但有两处的话先手顾此失彼;第三步才有人赢的情况:比上两种情况稍微复杂, 阅读全文
posted @ 2012-03-01 18:05 procedure2012 阅读(277) 评论(0) 推荐(0)
[HDU3581 Prison Break]
摘要:[关键字]:搜索+建图[题目大意]:给出一个矩阵,矩阵里有5种格子:‘F’初始位置;‘G’:能量池——可以将能量补满;‘Y’开关;‘D’:不能走到;‘S’:空地,问最小拥有多少初始能量才能走过所有开关。//============================================================================================================================================[分析]:首先只要有解,中间走过哪些‘S’都无所谓,只有‘Y’和‘G’是需要考虑的节点,所以可以先BFS或Floy 阅读全文
posted @ 2012-03-01 17:52 procedure2012 阅读(274) 评论(0) 推荐(0)