10 2014 档案

摘要:在线的LCA算法,dfs遍历整棵树,对于每个点出现的时候都插入到数组中,然后查询两个点的lca就是两个点在数组中最后出现位置间的dep值最小的点,就转化为链上的RMQ问题了。#include #include #include #include #include #include #include ... 阅读全文
posted @ 2014-10-31 21:18 acm_roll 阅读(172) 评论(0) 推荐(0)
摘要:裸的LCA离线算法,存下来当模板用吧。思想就是,将所有的查询都先存起来,然后对树做一次dfs遍历,对每一次经过的节点进行染色,标记为未访问,正在访问,和已经访问完毕。可以很明显的发现如果当前点是一个查询的端点,那么如果另外一个端点正在访问,则当前点是另外一个端点的子节点,两者的LCA为另外一个端点,... 阅读全文
posted @ 2014-10-31 19:53 acm_roll 阅读(418) 评论(0) 推荐(0)
摘要:这题比较神,不看题解我是想不出来T_T证明过程如下之后直接无脑快速幂就好了。。#include #include #include #include #include #include #include #include #include #include using namespace std; ... 阅读全文
posted @ 2014-10-28 09:50 acm_roll 阅读(190) 评论(0) 推荐(0)
摘要:构造出类似这样的矩阵1 0 0 11 1 0 00 1 1 00 0 1 1通过对2取模就可以模拟出开关灯的状态了。然后直接快速幂#include #include #include #include #include #include #include #include #include #inc... 阅读全文
posted @ 2014-10-28 09:47 acm_roll 阅读(137) 评论(0) 推荐(0)
摘要:利用二项式定理,可以可以将x^k*k^x展开得x^(k-1)*(1+k-1)^x从而得到递推关系,构造出矩阵直接快速幂就好了。#include #include #include #include #include #include #include #include #include #inclu... 阅读全文
posted @ 2014-10-28 09:45 acm_roll 阅读(225) 评论(0) 推荐(0)
摘要:水题, 直接模拟就可以。姿势要注意。。#include #include #include #include #include #include #include #include #include #include using namespace std; #define MP make_pair... 阅读全文
posted @ 2014-10-25 14:45 acm_roll 阅读(195) 评论(0) 推荐(0)
摘要:可以构造如下矩阵A:1 0 0 0 0 0 0 0 0 0 0 0 1 10 0 0 0 0 0 0 0 0 0 0 1 10 1 0 0 0 0 0 0 0 0 0 1 10 1 1 0 0 0 0 0 0 0 0 1 10 1 1 1 0 0 0 0 0 0 0 1 10 1 1 1 1 0 0... 阅读全文
posted @ 2014-10-24 20:50 acm_roll 阅读(186) 评论(0) 推荐(0)
摘要:利用可达矩阵的幂来判断是否可达#include #include #include #include #include #include #include #include #include #include using namespace std; #define MP make_pair#def... 阅读全文
posted @ 2014-10-24 19:50 acm_roll 阅读(174) 评论(0) 推荐(0)
摘要:和前面有一题是一样的做法吧。A^1+A^2+A^3+A^4 = A^1+A^2+A^2*(A^1+A^2)类似这样搞就可以二分处理了。#include #include #include #include #include #include #include #include #include #i... 阅读全文
posted @ 2014-10-24 18:45 acm_roll 阅读(297) 评论(0) 推荐(0)
摘要:可达矩阵的K次幂便是从i到j走K步能到达的方案数。注意处理k=0的情况。#include #include #include #include #include #include #include #include #include #include using namespace std; #de... 阅读全文
posted @ 2014-10-24 18:23 acm_roll 阅读(189) 评论(0) 推荐(0)
摘要:If x = 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);对于这样一个式子,通过矩阵与线性变换的关系,可以轻松的构造出这样的矩阵A0:9 8 7 6 5 4 3 2 1 0 A1:1 1 1 1 1 1 ... 阅读全文
posted @ 2014-10-24 18:08 acm_roll 阅读(157) 评论(0) 推荐(0)
摘要:首先fib数列可以很随意的推出来矩阵解法,然后这里就是要处理一个关于矩阵的等比数列求和的问题,这里有一个logn的解法,类似与这样A^0+A^1+A^2+A^3 = A^0 + A^1 + A^2 * (A^0 + A^1) 处理就好了。#include #include #include #inc... 阅读全文
posted @ 2014-10-24 17:36 acm_roll 阅读(164) 评论(0) 推荐(0)
摘要:跟着cxlove的矩阵专题(http://blog.csdn.net/ACM_cxlove/article/details/7815594)刷的,一道一道来。最裸的题目,直接快速幂算就好了。#include #include #include #include #include #include #... 阅读全文
posted @ 2014-10-24 15:48 acm_roll 阅读(163) 评论(0) 推荐(0)
摘要:先预处理出能到当前点的区间,然后通过前缀和求得当前值即可。#include #include #include #include #include #include #include #include #include #include using namespace std; #define MP... 阅读全文
posted @ 2014-10-21 21:36 acm_roll 阅读(133) 评论(0) 推荐(0)
摘要:主要的贪心思想就是,如果有一个不合法的*,那么再他前面加1或者2个数字的花费是不可能小于把它和后面的数字交换的,所以把不合法星号尽可能的往后放即可。这里我因为懒得特判,把每个情况都算了,不过n只有1000,n^2也是可以接受的。#include #include #include #include ... 阅读全文
posted @ 2014-10-17 20:22 acm_roll 阅读(128) 评论(0) 推荐(0)
摘要:不知道为什么是对的,但是举不出反例,比赛的时候队友提出找树的直径,不过我没敢写,真是可惜。具体做法就是先找到原树的直径,然后删去最中间的一条边,变为两个子树,分别球两颗子树的直径中点,便是答案了。#include #include #include #include #include #includ... 阅读全文
posted @ 2014-10-17 20:19 acm_roll 阅读(255) 评论(0) 推荐(0)
摘要:状态i,j,k为已经有i行,j列放满,放了k个棋子的概率,转移分四种情况(只增加行,只增加列,行列都增加,行列都不增加)讨论即可。#include #include #include #include #include #include #include #include #include #inc... 阅读全文
posted @ 2014-10-17 19:24 acm_roll 阅读(204) 评论(0) 推荐(0)
摘要:由于数据量比较大,所以必须用O(n)的算法搞定,因此用hash记录没一个key值对应的值的左右边界,这样可以避免字符串的复制,然后从左到右扫一遍,如果遇到大括号就进行一下压栈操作就好了。感觉写的还可以,67行。。比赛的时候没写真是可惜了。#include #include #include usin... 阅读全文
posted @ 2014-10-17 19:22 acm_roll 阅读(203) 评论(0) 推荐(0)
摘要:先把行合并,然后二分一下最小值就好。// BEGIN CUT HERE// END CUT HERE#line 5 "ChocolateDividingHard.cpp"#include #include #include #include #include #include #include #i... 阅读全文
posted @ 2014-10-16 18:30 acm_roll 阅读(194) 评论(0) 推荐(0)
摘要:和上一题差不多的方法。。没什么好说的#include #include #include using namespace std;const int maxn = (5e4 + 10) * 4;#define F(x) ((x) / 3 + ((x) % 3 == 1 ? 0 : tb))#defi... 阅读全文
posted @ 2014-10-05 09:44 acm_roll 阅读(184) 评论(0) 推荐(0)
摘要:论文里面的神题,题意大概是找出当前字符串中的一个子串,使得这个子串由N个字符串循环构成,输出N最大的子串,如果有多输出字典序最小的一个。解决方法感觉很犀利。。首先,对于循环节长度为L的子串,必然有这个子串会经过str[0],str[L],str[2*L]...中的任意两个字符,也就是必然会经过str... 阅读全文
posted @ 2014-10-04 21:02 acm_roll 阅读(233) 评论(0) 推荐(0)