08 2014 档案
摘要:题意:给一些直线,问这些直线在直线x=L,x=R之间有多少个交点。讲解见此文:http://blog.sina.com.cn/s/blog_778e7c6e0100q64a.html首先将直线分别跟x=L+eps,x=R-eps(防止出现相同纵坐标,故+-eps)求他们的交点,求的纵坐标为low,h...
阅读全文
摘要:题意:给了一棵树以及每个节点的颜色,1代表黑,0代表白,求将这棵树拆成k棵树,使得每棵树恰好有一个黑色节点的方法数解法:树形DP问题。定义:dp[u][0]表示以u为根的子树对父亲的贡献为0dp[u][1]表示以u为根的子树对父亲的贡献为1现在假设u为白色,它的子树有x,y,z,那么有dp[u][1...
阅读全文
摘要:题意:给你一些区间操作,让你输出最后得出的区间。解法:区间操作的经典题,借鉴了网上的倍增算法,每次将区间乘以2,然后根据区间开闭情况做微调,这样可以有效处理开闭区间问题。线段树维护两个值: cov 和 rev ,一个是覆盖标记,0表示此区间被0覆盖,1表示被1覆盖,-1表示未被覆盖, rev为反转标...
阅读全文
摘要:题意:给n个矩形,求矩形周长并解法:跟求矩形面积并差不多,不过线段树节点记录的为:len: 此区间线段长度cover: 此区间是否被整个覆盖lmark,rmark: 此区间左右端点是否被覆盖num: 此区间分离开的线段的条数重点在转移的地方,不难理解。代码:#include #include #in...
阅读全文
摘要:题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和。解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt].len[i]表示覆盖次数大于等于i的线段长度,以便求面积,最后只要每次都用tree[1].len[K...
阅读全文
摘要:题意:给出矩形两对角点坐标,求矩形面积并。解法:线段树+离散化。每加入一个矩形,将两个y值加入yy数组以待离散化,将左边界cover值置为1,右边界置为2,离散后建立的线段树其实是以y值建的树,线段树维护两个值:cover和len,cover表示该线段区间目前被覆盖的线段数目,len表示当前已覆盖的...
阅读全文
摘要:题意:给你n个球排成一行,初始都为黑色,现在给一些操作(L,R,color),给[L,R]区间内的求染上颜色color,'w'为白,'b'为黑。问最后最长的白色区间的起点和终点的位置。解法:先离散化,为了防止离散后错误,不仅将L,R离散,还要加入L+1,L-1,R+1,R-1一起离散,这样就绝不会有...
阅读全文
摘要:题意:给你一个字符串,要求把它按语法转化成HTML格式。分析:这题其实不难,就是一个递归的事情,当时忽略了括号嵌套的情况,所以一直WA,后来加上这种情况后就过了。简直醉了。处理id和class时,在一个'>'内,先把遇到的id和class都push到一个容器中,然后再输出即可。这题要注意的地方: 1...
阅读全文
摘要:题意:不讲了,线段树离散化的入门题。之所以贴出来只为吐槽几个地方:1.最后统计颜色的时候,试了好几种方法都TLE,反正用vis就TLE,不知道别人的怎么行,最后没办法,学了网上一个机智的做法:用set记录ans个数,最后过了。2.数据不对,离散化的时候如果排完序后相邻的元素值不相邻的话,是不能离散为...
阅读全文
摘要:题意:给你一些区间,再查询一些点,问这些点与所有区间形成的最小距离的最大值。最小距离定义为:如果点在区间内,那么最小距离为0,否则为min(pos-L[i],R[i]-pos)。解法:当然要排个序,仔细想想会发现我们要找的区间的位置满足二分性质,即如果此时pos-L[mid] >= R[mid]-p...
阅读全文
摘要:题意:说不清楚,自己看吧,太恶心。这题真是SB了,当时看了一下以为乱搞就好了,于是开始动手拍,结果拍了好几个小时都没拍出来,而且越想越想不通,直接把自己绕进去了,结果gg了。总结:甭管什么题,想清楚了再拍。其实当初绕进去的时候,应该换个思路重新来一遍更好解法:枚举时间从00:00~23:59,数字显...
阅读全文
摘要:题意:n个点,m条边,每条边有一个权值,找一条边数最多的边权严格递增的路径,输出路径长度。解法:先将边权从小到大排序,然后从大到小遍历,dp[u]表示从u出发能够构成的严格递增路径的最大长度。 dp[u] = max(dp[u],dp[v]+1),因为有重复的边权值,所以用dis数组先记录,到不重复...
阅读全文
摘要:题意:给出数组A,定义f(l,r,x)为A[]的下标l到r之间,等于x的元素数。i和j符合f(1,i,a[i])>f(j,n,a[j]),求有多少对这样的(i,j).解法:分别从左到右,由右到左预处理到某个下标为止有多少个数等于该下标,用map维护。然后树状数组更新每个f(j,n,a[j]),预处理...
阅读全文
摘要:题意:两个人A和B在打牌,只有题目给出的几种牌能出若A第一次出牌B压不住或者A一次就把牌出完了,那么A赢,输出Yes,否则若A牌没出完而且被B压住了,那么A输,输出No。解法:知道规则,看清题目,搞清有哪些Trick,就可以直接模拟搞了。详见代码:#include #include #include...
阅读全文
摘要:令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值。则树的重心定义为:一个点,这个点的属性值在所有点中是最小的。SGU 134 即要找出所有的重心,并且找出重心的属性值。考虑用树形DP。dp[u]表示割去u点,得到的连通分支的节点数的最大值。tot[u]记录以u为...
阅读全文
摘要:题意:第i天的天气会一定概率地影响第i+1天的天气,也会一定概率地影响这一天的湿度.概率在表中给出。给出n天的湿度,推测概率最大的这n天的天气。分析:这是引自机器学习中隐马尔科夫模型的入门模型,其实在这里直接DP就可以了定义:dp[i][j]为第i天天气为j(0,1,2分别表示三个天气)的概率,pa...
阅读全文
摘要:题意:给n个医生,这些医生有一个上班时间,然后给一些病人,病人有一个到达的时间,以及一些诊断,诊断有property(优先级)和duration(诊断时间)这两个属性,每个病人可能要诊断多次,最后问每个病人的全部疗程完成离开医院的时间是多少。分析:用优先队列存储诊断,病人,然后模拟一个诊断过程,完成...
阅读全文
摘要:题意大概就是八数码问题,只不过把空格的移动方式改变了:空格能够向前或向后移动一格或三格(循环的)。分析:其实跟八数码问题差不多,用康托展开记录状态,bfs即可。代码:#include #include #include #include #include #include #include #inc...
阅读全文
摘要:题意:x=[-200,200],y=[-200,200]的平面,一天中太阳从不同角度射到长椅(原点(0,0))上,有一些树(用圆表示),问哪个时刻(分钟为单位)太阳光线与这些圆所交的弦长总和最长。太阳距离原点总是500m。(这些圆不会互相相交,每个圆都不包括原点或者不经过原点)解法:直接暴力24*6...
阅读全文
摘要:题意:一个NxN的网格地板,有一些激光束从天花板垂直射向地面的某个网格,一个圆要安全地从左走到右,不碰到上边界,下边界以及激光束,问这个圆的直径最大能达到多大。分析:可以二分直径,关键在check函数的写法。可以讲这个圆缩成一个点,把圆的直径转化为激光的扫描范围,当激光范围完全堵死一条通道的时候,这...
阅读全文
摘要://求取下n环和放上n环的步数int ans;//规则一:第一环可以在任何时候放上或取下环柄。//规则二:只有紧跟在领头环后的环可以放上或取下环柄。(领头环是套在柄上的最前面的环int DownRing(int);int UpRing(int);int DownRing(int n){ int...
阅读全文
摘要:题意:给n个文件,包括文件名和文件大小,然后给出k个关键词,查询包含该关键词的文件的大小总和。文件名为一些中括号括起的关键词的合集。解法:可用bitset记录每一个关键词在哪些文件中出现,然后查询即可。bitset用法如下:bitset bs;bool is_set = bs.any(); /...
阅读全文
摘要:题意:给你n(n#include #include #include #include #include #include using namespace std;#define N 207vector vx,vy;map hx,hy;int dx[4] = {0,0,1,-1};int dy[4]...
阅读全文
摘要:昨天晚上写的,写了一个多小时,9000+B,居然1A了,爽。题意:玩扑克,比大小。规则如下:题意很简单,看过赌神的人都知道,每人手中5张排,比牌面大小,牌面由大到小分别是(这里花色无大小),级别从高到低依次为:1.同花顺:牌面一样,只比较最大的看谁大,一样大则平手2.四条:四个一样的,看这四个一样的...
阅读全文
摘要:题意:给你一串数字,问这串数字符合f[n] = a*f[n-1],f[n] = a*f[n-1]+b*f[n-2],f[n] = a*f[n-1]+b*f[n-2]+c*f[n-3]这几个方程中的哪个,然后要你给出第n+1项,如果符合多个方程,项数小的优先(第一个方程优先)。解法:这题我先处理看是否...
阅读全文
摘要:题意:给一个递推式S(n) = a1*S(n-1)+...+aR*S(n-R),要求S(k)+S(2k)+...+S(nk)的值。分析:看到n的大小和递推式,容易想到矩阵快速幂。但是如何转化呢?首先看到我们用A表示上面的递推式中的R*R的那个矩阵,那么对于前面那个向量,每次乘上A^k之后都会变成(S...
阅读全文
摘要:题意:给n个石头,分成一些部分(最多n部分,随便分),问分完后每部分的数量的乘积有多少种情况。分析:可以看出,其实每个乘积都可以分解为素数的乘积,比如乘积为4,虽然可以分解为4*1,但是更可以分解为2*2*1,所以就可以枚举素因子来分解,dfs即可。代码:#include #include #inc...
阅读全文
摘要:题意:一些人有朋友关系,在某个人的社交网站上投放广告可以被所有该人的直接朋友看到,问最小投放多少个广告使给出的人都看到广告。(n#include #include #include #include #define Mod 1000000007using namespace std;#define ...
阅读全文