Fork me on GitHub
上一页 1 2 3 4 5 6 7 8 ··· 10 下一页
摘要: 题意:给一棵树,要求找出两个点,使得所有点到这两个点中距离与自己较近的一个点的距离的最大值(所有点的结果取最大的值,即最远距离)最小。 意思应该都能明白。解法:考虑将这棵树摆直如下:那么我们可以把最中间的那条直径边删掉,然后在分成的两颗子树内求一个直径中心点,那么这两个点就可以作为答案。 反正当时就... 阅读全文
posted @ 2014-10-14 17:56 whatbeg 阅读(531) 评论(0) 推荐(0) 编辑
摘要: 题意: 树上路径之间的点统一加减k,查询某点的值解法:不会LCA的解法,于是用树链剖分了,比较简单的剖分,然后用线段树维护就行了,相当于区间更新,单点查询,查询点 i 的值时,只需在线段树中查询pos[u]位置的值即可。加IO优化900+ms代码:#include #include #include... 阅读全文
posted @ 2014-10-07 15:16 whatbeg 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题意:给一棵树,两种操作: ADD1: 给u-v路径上所有点加上值k, ADD2:给u-v路径上所有边加上k,初始值都为0,问最后每个点和每条边的值,输出。解法:树链剖分可做,剖出来如果直接用线段树来区间更新的话会TLE,所以要换一种姿势,有一种树链剖分的经典姿势就是看做树状数组一样,每次加值的时候... 阅读全文
posted @ 2014-10-02 10:14 whatbeg 阅读(779) 评论(9) 推荐(0) 编辑
摘要: 题意:给一棵树,每次更新某条边或者查询u->v路径上的边权最大值。解法:做过上一题,这题就没太大问题了,以终点的标号作为边的标号,因为dfs只能给点分配位置,而一棵树每条树边的终点只有一个。询问的时候,在从u找到v的过程中顺便查询到此为止的最大值即可。代码:#include #include #in... 阅读全文
posted @ 2014-10-01 10:25 whatbeg 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 题意:给一棵树,每次给两个节点间的所有节点发放第k种东西,问最后每个节点拿到的最多的东西是哪种。解法:解决树的路径上的修改查询问题一般用到的是树链剖分+线段树,以前不会写,后来学了一下树链剖分,感觉也不是很难,就是把整个数分成很多链,然后一条重链上的点在线段树中位置是连续的,这样使得更新和查询时更加... 阅读全文
posted @ 2014-09-30 20:17 whatbeg 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 题意:给n个数字,每次两种操作: 1.修改第x个数字为y。 2.查询[L,R]区间内第D位为P的数有多少个。解法:这题当时被卡内存了,后来看了下别人代码发现可以用unsigned short神奇卡过,于是学习了。这种区间求和的问题很容易想到树状数组,根据第i位为j(i#include #includ... 阅读全文
posted @ 2014-09-29 13:40 whatbeg 阅读(379) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个距离矩阵,问是不是一颗正确的带权树。解法:先按找距离矩阵建一颗最小生成树,因为给出的距离都是最短的点间距离,然后再对每个点跑dfs得出应该的dis[][],再对比dis和原来的mp是否一致即可。首先还要判断一些东西。具体看代码吧。代码:#include #include #includ... 阅读全文
posted @ 2014-09-29 13:09 whatbeg 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 题解见官方题解,我这里只实现一下,其实官方题解好像有一点问题诶,比如while( str[startPos] != str[i+1] ) cnt[str[startPos]]--, startPos++;那个str[i+1]的话会越界。应该是这样:while(str[startPos] != str... 阅读全文
posted @ 2014-09-28 23:16 whatbeg 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 题意:给n个‘M'形,问最多能把平面分成多少区域解法:推公式 : f(n) = 4n(4n+1)/2 - 9n + 1 = (8n+1)(n-1)+2前面部分有可能超long long,所以要转化一下,令a = 8n+1, b = n-1,将两个数都化为a1*10^8+b1的形式,则(a1*10^8... 阅读全文
posted @ 2014-09-28 10:42 whatbeg 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 题意:给一些线段,然后给m个查询,每次查询都给出一些点,问有多少条线段包含这个点集中的一个或多个点解法:直接离线以点为基准和以线段为基准都不好处理,“正难则反”,我们试着求有多少线段是不包含某个查询的任意一个点的。这时候我们可以建立点集的补集,以线段的形式,如果点集的补集线段包含了某条给出的线段,那... 阅读全文
posted @ 2014-09-23 18:59 whatbeg 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 题意:给一串数字,每次查询[L,R]中两个数的gcd的最大值。解法:容易知道,要使取两个数让gcd最大,这两个数最好是倍数关系,所以处理出每个数的所有倍数,两两间根据倍数关系形成一条线段,值为该数。那么每次查询[L,R]之间两数gcd的最大值即为查询[L,R]中值最大的线段,离线所有的查询数据,然后... 阅读全文
posted @ 2014-09-23 18:48 whatbeg 阅读(261) 评论(0) 推荐(2) 编辑
摘要: 题意:给一些建筑物,x表示横坐标,h表示高度,然后查询某些坐标x,问从该点看向天空的最大张角是多大。解法:离线操作,读入所有数据,然后按x升序排序,对每一个查询的x,先从左到右,依次添加x坐标小于x的建筑物,加入一个建筑物的条件:1.此建筑物高度大于栈中的前一个,这个必然是最优的。2.加入这个建筑物... 阅读全文
posted @ 2014-09-21 22:16 whatbeg 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个地图,孙悟空(K)救唐僧(T),地图中'S'表示蛇,第一次到这要杀死蛇(蛇最多5条),多花费一分钟,'1'~'m'表示m个钥匙(m=dis[当前状态],那么就不再扩展下去了。BFS中的逻辑就很简单了,看代码吧。最后,枚举蛇的状态S,取dis[x][y][m+1][S]的最小值即为最小步数... 阅读全文
posted @ 2014-09-20 17:50 whatbeg 阅读(657) 评论(0) 推荐(1) 编辑
摘要: 题意:给一篇文章,再给一些单词替换关系a b,表示单词a可被b替换,可多次替换,问最后把这篇文章替换后(或不替换)能达到的最小的'r'的个数是多少,如果'r'的个数相等,那么尽量是文章最短。解法:易知单词间有二元关系,我们将每个二元关系建有向边,然后得出一张图,图中可能有强连通分量(环等),所以找出... 阅读全文
posted @ 2014-09-19 12:21 whatbeg 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 题意:把长度为n的序列分成k个m长的连续小序列,这些连续小序列的和最大是多少。解法:显然DP。定义: dp[i][j] 为前 i 个元素分成j个m端,且 i 是第j个的末尾的最大和。那么有: dp[i][j] = max(dp[i-1][j], dp[i-m][j-1]+sum[i]-sum[i-m... 阅读全文
posted @ 2014-09-19 09:50 whatbeg 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个环,环上有n块,每块有个值,每一次操作是对每个点,他的值变为原来与他距离不超过d的位置的和,问k(10^7)次操作后每块的值。解法:一看就要化为矩阵来做,矩阵很好建立,大白书P157页有讲,大概为:[1 1 0 .. 0 1][1 1 1 .. .. 0]...[1 1 .. .. ..... 阅读全文
posted @ 2014-09-18 21:54 whatbeg 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个点(x,y),给一些步长delta1,delta2...deltaN,问从(0,0)严格按照步长走完N步后能否正好到达(x,y)点。解法:其实就是判断这些线段和(0,0)-(x,y)这条线段能否构成一个多边(角?)形的问题,只需判断最长的边是否不大于于所有边长和的一半即可。代码:#inc... 阅读全文
posted @ 2014-09-18 09:28 whatbeg 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 题意:给n个点(x,y,p),从1~n,一次每次所有点绕着第 i 个点(原来的)逆时针转pi个弧度,问最后所有点的位置相当于绕哪个点旋转多少弧度,求出那点X和弧度P解法:直接模拟旋转,每次计算新的坐标,最后选两个新的点分别和他们原来的点连一条线,两条线的中垂线的交点即为圆心,求出了圆心就可以求出转了... 阅读全文
posted @ 2014-09-17 19:15 whatbeg 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 1.数字转stringint x;string id;stringstream ss;ss > id;2.字符串转数字int num;string s;stringstream ss(s);ss>>num;char str[];sscanf( str, "%d", &num ); /... 阅读全文
posted @ 2014-09-17 13:31 whatbeg 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 为了补这题,特意学了下模拟退火算法,感觉算法本身不是很难,就是可能降温系数,步长等参数不好设置。具体学习可以参见:http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html 我认为讲的很不错,通俗易懂。这题设置一个step为1,降温系数为... 阅读全文
posted @ 2014-09-16 18:51 whatbeg 阅读(724) 评论(0) 推荐(0) 编辑
摘要: 题意:给出矩阵的第0行(233,2333,23333,...)和第0列a1,a2,...an(n#include #include #include #include #include #define Mod 10000007#define SMod Mod#define lll __int64us... 阅读全文
posted @ 2014-09-14 23:43 whatbeg 阅读(2750) 评论(0) 推荐(10) 编辑
摘要: 题意:统计一段序列【L,R】的和,重复元素只算一次。解法:容易看出在线做很难处理重复的情况,干脆全部讲查询读进来,然后将查询根据右端点排个序,然后离散化数据以后就可以操作了。每次读入一个数,如果这个数之前出现过,那么删除之前出现的那个数,改加上这个数,然后进行所有右端点小于等于此时下标的查询即可。关... 阅读全文
posted @ 2014-09-13 22:27 whatbeg 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个三维数组n*n*n,初始都为0,每次有两个操作:1. 翻转(x1,y1,z1) -> (x2,y2,z2)0. 查询A[x][y][z] (A为该数组)解法:树状数组维护操作次数,一个数被操作偶数次则相当于没被操作。每次更新时在8个位置更新:。相当于8个二进制数:000,001,010,... 阅读全文
posted @ 2014-09-13 20:44 whatbeg 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个两边长为a,b的矩形,要求增加a和增加b使a*b>=6*n且a*b最小。解法:设新的a,b为a1,b1,且设a#include #include #include #define lll __int64using namespace std;int main(){ lll n,a... 阅读全文
posted @ 2014-09-13 10:15 whatbeg 阅读(408) 评论(0) 推荐(1) 编辑
摘要: 题意:给一个序列,操作1:给区间[a,b]中(i-a)%k==0的位置 i 的值都加上val 操作2:查询 i 位置的值解法:树状数组记录更新值。 由 (i-a)%k == 0 得知 i%k == a%k,又因为k #include #include #include #include #inclu... 阅读全文
posted @ 2014-09-12 17:36 whatbeg 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个n*m的格子,格子中有一些数,如果是正整数则为到此格子的花费,如果为-1表示此格子不可到,现在给k个宝藏的地点(k#include #include #include #include #include #include #define Mod 1000000007using names... 阅读全文
posted @ 2014-09-09 10:20 whatbeg 阅读(502) 评论(0) 推荐(0) 编辑
摘要: 题意:求S(k) = A+A^2+...+A^k.解法:二分即可。if(k为奇) S(k) = S(k-1)+A^kelse S(k) = S(k/2)*(I+A^(k/2))代码:#include #include #include #include #define SMod musing ... 阅读全文
posted @ 2014-09-09 10:02 whatbeg 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 题意:给一串数字,问长度为m的严格上升子序列有多少个解法:首先可以离散化为10000以内,再进行dp,令dp[i][j]为以第i个元素结尾的长度为j的上升子序列的个数,则有dp[i][j] = SUM(dp[k][j-1]) (a[k] #include #include #include #inc... 阅读全文
posted @ 2014-09-08 00:58 whatbeg 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 题意:给一些直线,问这些直线在直线x=L,x=R之间有多少个交点。讲解见此文:http://blog.sina.com.cn/s/blog_778e7c6e0100q64a.html首先将直线分别跟x=L+eps,x=R-eps(防止出现相同纵坐标,故+-eps)求他们的交点,求的纵坐标为low,h... 阅读全文
posted @ 2014-08-29 12:35 whatbeg 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 题意:给了一棵树以及每个节点的颜色,1代表黑,0代表白,求将这棵树拆成k棵树,使得每棵树恰好有一个黑色节点的方法数解法:树形DP问题。定义:dp[u][0]表示以u为根的子树对父亲的贡献为0dp[u][1]表示以u为根的子树对父亲的贡献为1现在假设u为白色,它的子树有x,y,z,那么有dp[u][1... 阅读全文
posted @ 2014-08-28 16:19 whatbeg 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一些区间操作,让你输出最后得出的区间。解法:区间操作的经典题,借鉴了网上的倍增算法,每次将区间乘以2,然后根据区间开闭情况做微调,这样可以有效处理开闭区间问题。线段树维护两个值: cov 和 rev ,一个是覆盖标记,0表示此区间被0覆盖,1表示被1覆盖,-1表示未被覆盖, rev为反转标... 阅读全文
posted @ 2014-08-28 15:15 whatbeg 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 题意:给n个矩形,求矩形周长并解法:跟求矩形面积并差不多,不过线段树节点记录的为:len: 此区间线段长度cover: 此区间是否被整个覆盖lmark,rmark: 此区间左右端点是否被覆盖num: 此区间分离开的线段的条数重点在转移的地方,不难理解。代码:#include #include #in... 阅读全文
posted @ 2014-08-28 11:13 whatbeg 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和。解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt].len[i]表示覆盖次数大于等于i的线段长度,以便求面积,最后只要每次都用tree[1].len[K... 阅读全文
posted @ 2014-08-28 10:25 whatbeg 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 题意:给出矩形两对角点坐标,求矩形面积并。解法:线段树+离散化。每加入一个矩形,将两个y值加入yy数组以待离散化,将左边界cover值置为1,右边界置为2,离散后建立的线段树其实是以y值建的树,线段树维护两个值:cover和len,cover表示该线段区间目前被覆盖的线段数目,len表示当前已覆盖的... 阅读全文
posted @ 2014-08-25 15:42 whatbeg 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 题意:给你n个球排成一行,初始都为黑色,现在给一些操作(L,R,color),给[L,R]区间内的求染上颜色color,'w'为白,'b'为黑。问最后最长的白色区间的起点和终点的位置。解法:先离散化,为了防止离散后错误,不仅将L,R离散,还要加入L+1,L-1,R+1,R-1一起离散,这样就绝不会有... 阅读全文
posted @ 2014-08-24 10:52 whatbeg 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个字符串,要求把它按语法转化成HTML格式。分析:这题其实不难,就是一个递归的事情,当时忽略了括号嵌套的情况,所以一直WA,后来加上这种情况后就过了。简直醉了。处理id和class时,在一个'>'内,先把遇到的id和class都push到一个容器中,然后再输出即可。这题要注意的地方: 1... 阅读全文
posted @ 2014-08-22 18:46 whatbeg 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 题意:不讲了,线段树离散化的入门题。之所以贴出来只为吐槽几个地方:1.最后统计颜色的时候,试了好几种方法都TLE,反正用vis就TLE,不知道别人的怎么行,最后没办法,学了网上一个机智的做法:用set记录ans个数,最后过了。2.数据不对,离散化的时候如果排完序后相邻的元素值不相邻的话,是不能离散为... 阅读全文
posted @ 2014-08-21 21:06 whatbeg 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一些区间,再查询一些点,问这些点与所有区间形成的最小距离的最大值。最小距离定义为:如果点在区间内,那么最小距离为0,否则为min(pos-L[i],R[i]-pos)。解法:当然要排个序,仔细想想会发现我们要找的区间的位置满足二分性质,即如果此时pos-L[mid] >= R[mid]-p... 阅读全文
posted @ 2014-08-20 10:17 whatbeg 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题意:说不清楚,自己看吧,太恶心。这题真是SB了,当时看了一下以为乱搞就好了,于是开始动手拍,结果拍了好几个小时都没拍出来,而且越想越想不通,直接把自己绕进去了,结果gg了。总结:甭管什么题,想清楚了再拍。其实当初绕进去的时候,应该换个思路重新来一遍更好解法:枚举时间从00:00~23:59,数字显... 阅读全文
posted @ 2014-08-18 19:23 whatbeg 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 题意:n个点,m条边,每条边有一个权值,找一条边数最多的边权严格递增的路径,输出路径长度。解法:先将边权从小到大排序,然后从大到小遍历,dp[u]表示从u出发能够构成的严格递增路径的最大长度。 dp[u] = max(dp[u],dp[v]+1),因为有重复的边权值,所以用dis数组先记录,到不重复... 阅读全文
posted @ 2014-08-17 16:01 whatbeg 阅读(233) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 10 下一页