- 博客(14)
- 收藏
- 关注
原创 HDU 4456 Crowd
去年区域赛留下来的遗憾题之一。 此题要考的是坐标转换后的二维树状数组,难点在于内存开不下,需要20000*20000,现场赛胆大的直接开了这么大就过了,向我们这种胆小的就直接被吓傻了。 hdu上内存32768K。 由树状数组的性质可知每次最多只会更新log(n)次,因此二维树状数组总共会更新m * log(n)*log(n)个地方,所以想办法存这些值就可以了,map会超时,搞个靠谱点的has
2013-09-03 21:29:55
839
原创 CF 338E Optimize!
题意:给一个串a,长度为n,一个串b长度为len, 问a有多少个长度为len的子串满足:和b任意匹配后,每一对值的和都大于等于h。 把b从大到小排序,对a里面的元素求出和b[i]相加大于等于h的最大的i , 这样b[1]~b[i]都满足和当前a里的元素相加大于等于h。 然后分别求出a中每一段长度为len的子串里:有多少要和b[1],b[2],......,b[len]之前匹配,记为c[
2013-08-18 20:33:43
877
原创 两题类似的数位DP
CF 331C3 - The Great Julya Calendar (60 points) SGU 390 TICKETS dfs写法的数位dp最牛的地方是:只要考虑状态怎么变,边界情况搞搞好然后就能AC。 这两题都是一段区间会对下一段区间有影响的数位DP,这个影响就用pair来记录,其他无脑写。 CF 331C3 #pragma comment(linker, "/ST
2013-08-17 21:07:31
862
原创 HDU 4684 The Budget of Traveler
题意:在树上做斜率优化 (题意是不是太浓缩了= =) 以前感觉毫无想法,必须写下blog加深印象。 dp[i] = dp[j] + (sum[i]-sum[j])*p[i] + r[i]; 转移方程,其中j是i的祖先。 斜率优化要维护队头和队尾,在树上怎么搞呢? 把树链想成队列,开个fa[]数组记录在每个节点在队列里的前一个元素,更新队尾只要把当前节点的fa设为设为相应的值,更新队头没有办法
2013-08-17 10:43:50
1119
原创 SRM 475 DIV1 900
题意: 一场考试。一些题目结果已经出来,对于j题每个人能知道自己是否做对,做对得到points[j]分,做错0分。 令一些结果还未出来的题目,对于j题知道每个人是否提交,提交了就有机会得到points[j]分,否则必然的到0分。 然后对于成绩排在前p的人中(分数相同按照id,id小的排前面),随机选择q个,问方案数。 给这DP跪,完全没思路,然后看了一眼别人的dp状态,yy乱搞,结
2013-08-12 15:38:24
735
原创 TopCoder SRM 474 DIV1 1000
题意:把一颗树对应到一张无向图上有多少种方案,即满足树上两点之间有边,那图上对应的两点之间也有边的方案。N 只要想到这是树型dp,这提就不难,状态为dp[i][j][mask],表示到树上节点为i对应图上节点为j时它及子树已经用过图上节点mask的方案数。mask是状态压缩。 转移的时候尽量优化,否则会tle。 #include #include #include #i
2013-08-12 14:33:45
790
原创 POJ 3415 Common Substrings
题意:求两个串中相同的长度大于K的子串对数。 两个串链接起来做后缀数组。 假设height数组为: 0 2 1 4 3 2 4 0 0 0 1 0 0 1 0表示是第一个串的后缀,1表示是第二个串的后缀。 如果现在求第7个后缀,能与之前第一个串的后缀得到多少的长度大于k的子串对数。 可以发现[1,2]区间的后缀和第7个后缀最长匹配都为1,[3,5]区间的后缀最长匹配为2
2013-08-11 14:31:12
788
原创 HDU 4654 k-edge connected components
题意:求一个无向图中,k联通分量的个数。 迭代过程: 用Stoer_Wagner求出当前全局最小割,判断是否大于k,是就返回,不是就按割边把图分成两个部分继续迭代。 用Soter_Wagner按最小割把图分为两部分的方法:此算法一直把点合并,当合并到某一状态时,当前最小割被更新了,那么对于当前最小割 ,"prim"时最后加入的那个点及和他合并的点就是一部分,剩余的点就是另一部分,得到
2013-08-07 12:44:13
871
原创 后缀自动机
先挖坑,做完再上题解 hdu 4622 hdu 4641 hdu 2609 spoj NSUBSTR spoj SUBLEX spoj LCS spoj LCS2
2013-08-06 09:47:28
1203
原创 Codeforces 316G3 Good Substrings (30 points)
题意:给一个长为50000的字符串t,还有10个约束(p,l,r), 当某一字符串s在p中出现的次数大于等于l,小于等于r时满足约束,问t有多少个不同的子串满足所有约束。 先考虑t的子串的性质: t 的长度为len 假设以 x 为起点的子串,终点在[l,len]范围内时满足所有约束条件中的小于部分。 那么对于以x+1为起点的子串,终点在[l1,len]范围内时满足所有约束条件中的小
2013-07-30 23:00:11
1076
原创 URAL 1956 Fire Signals
题意: 求一条直线满足,所有平面上点到这条直线的距离之和最小,点数n 经过长时间的YY,得出经过平面上的两个点的直线包含最优解。可以由 dis = |a*x+b*y+c|/sqrt(a*a+b*b) 得到。 因为在直线一侧的点 dis 的正负号是相同的,可以利用这一点。先枚举一点,另外的点按到这点的角度排序,然后扫描枚举另一点,维护两边的点的x之和,y之和,用abs(sum
2013-07-24 13:21:20
954
原创 Codeforces MemSQL start[c]up Round 1
A Square and Rectangles 题意:给定5个不重叠的长方形,问是否组合成一个正方形。x,y范围10^5 先得到x,y的最大最小值 然后在这个范围内枚举 x ,判断每一个x的位置y是否完全覆盖,由于不相交,直接把包含这个x的长方形的y差值相加,判断是否和y最大值和最小值的差值相等。 trick: 漏判 x和y最大值和最小值的差值是否相等。
2013-07-15 19:35:12
860
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人