摘要: 主要训练:数据结构,图论,数学,DP。。。数据结构:Splay tree, 动态树:LinkCut Tree 树链剖分,可持久化数据结构 自动机+DP 主席树 kd树 线段树加强训练 Dancing link精确覆盖图论,白书上的总结一下,加强训练,提高思维http://blog.sina.com.cn/s/blog_6635898a0102dqs2.html。。数学:生成函数等,接触其它题型,按链接刷http://blog.sina.com.cn/s/blog_6635898a0100magq.htmlDP:概率DP,数位DP,树形DP... 阅读全文
posted @ 2013-07-18 00:47 zhsl 阅读(748) 评论(2) 推荐(2) 编辑
摘要: Codeforces Round #171 (Div. 2) 搞完(题解) Codeforces Round #168 (Div. 2) 差E ( 题解 ) 阅读全文
posted @ 2013-03-11 21:36 zhsl 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3686 题意:给定一颗有根树,每个节点有0和1两种值。有两种操作:o a操作,把以a为根节点的子树的权值全部取反;q a操作,求以a为根节点的子树权值为1的节点个数。 先求出树的先序遍历结果,并且记录每颗子树的节点个数,然后就可以用线段树维护了。。 1 //STATUS:C++_AC_240MS_6524KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #i... 阅读全文
posted @ 2014-03-03 17:38 zhsl 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3349 题意:给定一个数列,序列A是一个满足|Ai-Ai-1| 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include ... 阅读全文
posted @ 2014-03-03 17:29 zhsl 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3201 题意:给一颗树,每个节点有一个权值,求节点数为n的最大权子树。 任意选择一个节点为根,然后DP转移就可以了,类似于分组背包。。。 1 //STATUS:C++_AC_0MS_324KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include ... 阅读全文
posted @ 2014-03-03 17:14 zhsl 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3401 DP方程容易想出来,f[i][j]表示第i天拥有j个股票的最优解,则: 1、不买不卖,f[i][j]=Max{ f[i][j], f[i-1][j] }。 2、买进,f[i][j]=Max{ f[i][j], f[pre][k] - (j-k)*ap[i] | j>=k }。 3、卖出,f[i][j]=Max{ f[i][j], f[pre][k] +(k-j)*bp[i] | k>=j }。 直接转移复杂度O(n^3),超时。考虑第二种情况,f[pre][k] -... 阅读全文
posted @ 2014-03-03 17:10 zhsl 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2888 模板题。解题思路如下(转载别人写的):dp[row][col][i][j] 表示[row,row+2^i-1]x[col,col+2^j-1] 二维区间内的最小值这是RMQ-ST算法的核心: 倍增思想== min( [row,row+ 2^(i-1)-1]x[col,col+2^j-1], [row+2^(i-1),row+2^i-1]x[col,col+2^j-1] )= min(dp[row][col][i-1][j], dp[row+(1 3 #include 4 #inc... 阅读全文
posted @ 2014-03-03 16:54 zhsl 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 今年的比赛对我来说基本上就这样结束了,还是感觉自己太弱啊T^T。。。。 首先是省赛,这真是一个悲壮的故事。。。。 热省赛,题目比较水,随便切了几道,然后就回到酒店休息了,不得不说今年的住宿环境比去年好了很多(其实去年也不差)。晚上在酒店熟悉了下自己的模板,然后和队友商量了下对策就开始睡觉了(~﹃~)~zZ 然后第二天早上我和zsc发扬优良传统,肚子都有点不舒服,然后就喜闻乐见的抢厕所了,直接导致老师和其它队员等了我们10多分钟。。。 比赛开始,zsc开始发现一道水题,果断敲之,然后怒交一发wa!检查出个错误,2A。然后接着是个什么涨水的题目,zsc说是线段树,然后我看了下,发现只... 阅读全文
posted @ 2013-11-25 20:53 zhsl 阅读(902) 评论(7) 推荐(5) 编辑
摘要: 转自:http://hi.baidu.com/vfxupdpaipbcpuq/item/0cbe522c3c9e4bcaa5275a121.小区间素数个数,百万级别。 简述:有的时候,我们需要知道某个特定区间的素数(区间大小较小,但数可能很大)。那么数组就开不下,这时候我们仍然可以使用筛法,只是所有的下标都进行了偏移。大家理解下面这段代码可以先用普通筛法写,然后数组下标集体移动即可。const int maxn = 100000;int PrimeList[maxn];int PrimeNum;bool IsNotPrime[maxn]; // IsNotPrime[i] = 1表示i ... 阅读全文
posted @ 2013-11-04 10:56 zhsl 阅读(1100) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3874 比较简单的题,题意也好懂。 先O(n)求每个数左边第一次出现的与他相同的数的位置l[i]。对询问按照y从小大排序,然后按照从左到右的顺序来跟新点,当前点为i,那么删掉l[i],加入点i,然后遇到询问求和。 1 //STATUS:C++_AC_2593MS_10024KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 1... 阅读全文
posted @ 2013-10-31 00:43 zhsl 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3872 题意:有n个龙珠按顺序放在一列,每个龙珠有一个type和一个权值,要求你把这n个龙珠分成k个段,每段的权值是这段中的最大的权值,使得最后的权值之和最小。但是现在有个要求,分的段中,龙珠的type不能和最右边的相等。 容易想到是一个DP:f[i]=Min{f[j]+Min(j,i) | j是满足要求的点}。直接搞的话O(n^2),显然超时了。但是可以发现,这个Min(j,i)是有分段性的,因此我们可以维护一个单调递减的栈,那么只要求栈中的元素就可以了,因为只有这些元素有效。这里还要求最... 阅读全文
posted @ 2013-10-31 00:39 zhsl 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1998 题意:有n个石头,每个石头有个重量,每个时间点你能让一个石头飞起来,但有m个时间点,你会分心,使得已经飞起来的石头会有重量之和大于k的石头掉下来,问你最终使的所有石头飞起来的时间。 维护一个前缀和,然后二分就可以了。 1 //STATUS:C++_AC_93MS_1113KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #incl... 阅读全文
posted @ 2013-10-31 00:22 zhsl 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1997 题意:记录了n个人进出门的时间点,每个人在房子里面待的时间要么小于等于a,要么大于等于b,询问能否对进出门的时间点找到一个合适的匹配。 对于满足的要求建立边即可,然后看是否能找到最大匹配。 1 //STATUS:C++_AC_109MS_4361KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #incl... 阅读全文
posted @ 2013-10-31 00:21 zhsl 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1991 水题。。 1 //STATUS:C++_AC_15MS_333KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 ... 阅读全文
posted @ 2013-10-31 00:15 zhsl 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1989 题意:给出一个字符串,m个操作:1,修改其中一个字符串,2,询问 [a, b] 是不是回文串。数据范围10^5。 如何快速判断字符串是不是回文串,可以用到多项式Hash。假设一个串s,那么字串s[i, j]的Hash值就是H[i, j]=s[i]+s[i+1]*x+s[i+2]*(x^2)+...+s[j]*(x^(i-j))。由于只有小写字母,因此x取27。但是H[i, j]这会很大,我们取模就可了,可以把变量类型设为unsigned long long, 那么自动溢出就相当 阅读全文
posted @ 2013-10-30 00:34 zhsl 阅读(940) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1987 题意:给定n条线段,每两条线段要么满足没有公共部分,要么包含。给出m个询问,求当前点被覆盖的最小长度的线段编号。 由于线段不存在部分相交的情况,因此,直接按照输入顺序覆盖区间就可以了,因为后覆盖的线段更短。 1 //STATUS:C++_AC_187MS_6805KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include ... 阅读全文
posted @ 2013-10-30 00:23 zhsl 阅读(837) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://www.cnblogs.com/zhsl/p/3395868.html 水题,注意细节。 1 //STATUS:C++_AC_31MS_333KB 2 #include 3 #include 4 #include 5 //#include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #in... 阅读全文
posted @ 2013-10-30 00:14 zhsl 阅读(327) 评论(0) 推荐(0) 编辑