摘要:
http://acm.timus.ru/problem.aspx?space=1&num=1651 这是今天训练的题,最近的训练都没有暑假的时候这么好的状态。整场训练,实际上有好几题可以做的,可是一开始就遇见这题,然后开始的时候做的方法不对,所以一直卡在这题,直到最后一个小时才出那两道水题。开始的时候以为这题就一个简单的bfs,直到打完比赛才明白原来这题是最短路。图论的题我都不太擅长,所以今天就这样卡死了。。。囧! 这题构图用的方法是先建好原路径的边,每个位置是一个点,然后标号相同的临近两个位置连一条长度是0的边,然后一个spfa搜索到结尾,最后回溯一下就可以得到目标序列了。代码如下: 阅读全文
摘要:
http://acm.hdu.edu.cn/statistic.php?pid=4305&from=126&lang=&order_type=0 生成树计数加上极角排序,开始的时候忘记了计算过程中,数值会变成负数,所以wa了一次。生成树计数的矩阵运算必须注意,最后答案应该将它调整为整数。 题意是有n(n<=300)个人,如果某个人被电了,在他附近r范围内的人都会被电,算出被电的人形成的图案的种类数。两个能传递的人之间的直线位置不能有第三个人。1800+ms的代码。。。囧:View Code 1 #include <cstdio> 2 #include 阅读全文
摘要:
http://www.spoj.pl/problems/HIGH/ 题目写着答案不超过long long,应该是中间过程爆long long了,所以用整型做的时候在辗转相除的过程超时了,后来改成double就过了!代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <cmath> 5 6 using namespace std; 7 8 //typedef long long ll; 9 typedef double l 阅读全文
摘要:
http://acm.timus.ru/problem.aspx?space=1&num=1627 生成树计数的题,直接用Matrix-Tree定理就可以解决问题了。代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 using namespace std; 6 7 const int maxSize = 100; 8 const int initMod = 1e9; 9 typedef long long ll; 10 int curS 阅读全文
摘要:
http://www.lightoj.com/volume_problemstat.php?problem=1277 LightOJ搞得挺漂亮的,第一次到那里交题,挺喜欢的。 线段树统计题,题意是:给出一行数,找到所要求的长度的单调上升子序列,并输出该序列。 这题我是先从后往前,求出到达某个位置的时候,最长可以构建出多长的单调上升子序列。这是一个dp问题,不过用dp方法复杂度是O(n^2)会超时,所以我用线段树来降低查找的复杂度。题目比较简单,不过数据范围较大,所以要用hash来离散化处理。最后回溯一下就可以搜索出目标序列了!代码如下:View Code 1 #include <cs.. 阅读全文
摘要:
http://poj.org/problem?id=2104 这是我第二次写这题了,原因只前两天看了可持久化数据结构的论文,看到线段树用可持久化的方式来写可以完成这题,于是在我构思好以后就一气呵成的把这题打了出来。一打出来就顺利通过了编译,不过刚开始的时候忘记将新建的结点的两个指针都赋值,所以稍稍debug了一下这个小问题。交上去以后RE了几次,原因是我的hash写烂了。在我改过来以后又变成TLE了,于是我就改成了模拟分配内存。。。。。几经周折,终于AC了! 这个题感觉如果是用可持久化来写,思路比较容易理清,不用像划分树复杂的位置运算,也不用像树套树那样动则200行代码。代码如下:View.. 阅读全文
摘要:
acm.hdu.edu.cn/showproblem.php?pid=4031 一道树状数组的题目,当然,用线段树也是可以的。不过线段树的常数比较大,所以不建议在这题用。 题意:有一道1~N的防线。对于每一个防线单位,某个时间t0被攻击过后,t0+1~t0+t-1的时间里的所有攻击都是成功的。在某些攻击过后会有查询,询问某个防线单位到目前为止受到了共多少次攻击。每攻击一次算一次单位时间,查询不算时间。 做法是用全部包含该被询问的防线单位的攻击次数减去被成功防御的攻击次数,因为这样做可以将统计的时间跳跃查找,从而降低复杂度。当然,最坏的情况是每个询问都由头搜索到尾,复杂度O(n^2)。根据... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=4351 这题是一道稍微复杂的区间合并线段树,因为没有query,可以写成RMQ来降低query的复杂度。 题意不难理解,先解释一下所谓的数字的根是指一个数的各位数字和的各位数字和的各位数字和的各位数字和。。。。直到数只剩一位。数字根有一个性质,就是它如果是非0,最后必然是非0的数;如果这个数模9余d,d!=0,d就是数字根,d==0,数字根就是9。知道性质以后,题目给出一列数,要求求出给定的一个区间里所有子序列的和的数字根中最大的5个数字根,不包括重复的。这个题意可以直接由下面的hint看出。 解决这个... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3221 矩阵快速幂加上x^n取模公式的一道题。 题意是计算函数在题目图片中的暴力程序中被调用了多少次。只要稍微模拟一下就可以知道是求a^f(n)+b^f(n+1) (mod P)是多少,其中f(n)为a[1]=1、a[2]=0且a[i]=a[i-1]+a[i-2]中的a[n]。这题有一条公式可以直接利用,x^n (mod m) = x^(n%phi(m)+phi(m)) (mod m),其中n>m,phi(m)为m的欧拉函数。这种方法的复杂度为O(sqrt(m))。 其实这题也可以用之前一题的cycle 阅读全文
摘要:
poj.org/problem?id=2892 poj上的一道数据结构题,这题正解貌似是Segment Tree,不过我用了Splay Tree来写,而且我个人认为,这题用Splay Tree会更好写! 先简单解释一下题意:有n个连续的村庄,有以下几种操作(1)破坏一个村庄(2)问某个村庄与多少个村庄相连(包括它本身)(3)重建之前破坏了的村庄。 这道题用Splay Tree做要用到一个类似DLX(Dancing Links)的操作,就是结点的假删除,用到这个题上可以说是相当的巧妙的。我们在删除结点前把结点Splay到根的位置,然后删除的只是子结点指向父结点(也就是现在要删除的结点)的指... 阅读全文