上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 34 下一页
摘要: 首先如果第一个数字是0的话,那么先手必胜。对于一个已知的先手必败状态,凡是能转移到先手必败的状态一定是必胜状态。比如1是必败状态,那么2~9可以转移到1,所以是必胜状态。10,10*,10**,10***,10****也都可以删除1后面那个0,转移到1,所以也是必胜状态。 1 #include 2... 阅读全文
posted @ 2015-04-10 13:40 AOQNRMGYXLMV 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 参见上一篇博客,里面有分析和结论。 1 #include 2 3 int main() 4 { 5 int T; scanf("%d", &T); 6 while(T--) 7 { 8 int n, a, c = 0, xorsum = 0;//c为充裕堆... 阅读全文
posted @ 2015-04-06 21:36 AOQNRMGYXLMV 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 一些概念和约定:公平游戏: 这里讨论的组合游戏都是公平游戏,也就是说一个游戏者可以把状态A变成B,那么另一个游戏者也可以。比如下棋就不是公平游戏,因为白方可以移动白子而黑方不能。状态图: 我们可以把游戏的状态用图的形式来组织。一个状态是一个节点,一条边代表通过一次操作将一个状态转移到另一个状态。... 阅读全文
posted @ 2015-04-06 19:27 AOQNRMGYXLMV 阅读(464) 评论(0) 推荐(0) 编辑
摘要: 就向书上说得那样,如果模式串P的第i行出现在文本串T的第r行第c列,则cnt[r-i][c]++;还有个很棘手的问题就是模式串中可能会有相同的串,所以用repr[i]来记录第i个模式串P[i]第一次出现的位置。如果repr[i] == i,说明这个模式串之前没有重复过,可以加进自动机里去。有重复的话... 阅读全文
posted @ 2015-04-05 20:47 AOQNRMGYXLMV 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 将K个模板串构成一个AC自动机,那些能匹配到的单词节点都称之为禁止节点。然后问题就变成了在Tire树上走L步且不经过禁止节点的概率。根据全概率公式用记忆化搜索求解。 1 #include 2 #include 3 #include 4 using namespace std; 5 ... 阅读全文
posted @ 2015-04-05 15:20 AOQNRMGYXLMV 阅读(340) 评论(0) 推荐(0) 编辑
摘要: AC自动机大名叫Aho-Corasick Automata,不知道的还以为是能自动AC的呢,虽然它确实能帮你AC一些题目。=_=||AC自动机看了好几天了,作用就是多个模式串在文本串上的匹配。因为有多个模式串构成了一颗Tire树,不能像以前一样线性递推失配函数f了,于是改成了BFS求失配函数。白书上... 阅读全文
posted @ 2015-04-04 20:58 AOQNRMGYXLMV 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 当初学KMP的时候也做过这道题,现在看来还是刘汝佳的代码要精简一些,毕竟代码越短越好记,越不容易出错。而且KMP的递推失配函数的代码风格和后面的Aho-Corasick自动机求失配函数的代码风格也是一致的。 1 #include 2 3 const int maxn = 1000000 + 10... 阅读全文
posted @ 2015-04-03 16:48 AOQNRMGYXLMV 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 这道题也是卡了挺久的。给出一个字符串比较的算法,有n个字符串两两比较一次,问一共会有多少次比较。因为节点会很多,所以Tire树采用了左儿子右兄弟的表示法来节省空间。假设两个不相等的字符串的最长公共前缀的长度为i,那么比较次数应该是2i+1。如果两个字符串相等,比较次数则是2i+2.可以像大白书上一样... 阅读全文
posted @ 2015-04-03 16:22 AOQNRMGYXLMV 阅读(323) 评论(0) 推荐(0) 编辑
摘要: d(i)表示从i开始的后缀即S[i, L-1]的分解方法数,字符串为S[0, L-1]则有d(i) = sum{ d(i+len(x)) | 单词x是S[i, L-1]的前缀 }递推边界为d(L) = 1,代表空串。将前n个单词构造一颗Tire树,在树中查找后缀的过程中遇到一个单词节点就代表找到一个... 阅读全文
posted @ 2015-04-02 00:08 AOQNRMGYXLMV 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 比较综合的一道题目。二维的线段树,支持区间的add和set操作,然后询问子矩阵的sum,min,max写完这道题也是醉醉哒,代码仓库里还有一份代码就是在query的过程中也pushdown向下传递标记。 1 #include 2 #include 3 #include 4 using ... 阅读全文
posted @ 2015-04-01 16:00 AOQNRMGYXLMV 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 本来打算把大白书第三章一口气攻下来的,但是这个线段树也是卡了好久。不敢过题太快,怕自己走马观花到头来结果什么都不会。可也不能再拖了,在做题中也许有更多的体会。模板一:1 L R v 表示区间[L, R]所有元素都加上v2 L R 表示查询区间[L, R]的sum, min, maxsumv[o]的定... 阅读全文
posted @ 2015-03-31 23:53 AOQNRMGYXLMV 阅读(415) 评论(0) 推荐(0) 编辑
摘要: n位不含前导零不含连续1的数共有fib(n)个,fib(n)为斐波那契数列。所以可以预处理一下fib的前缀和,查找一下第n个数是k位数,然后再递归计算它是第k位数里的多少位。举个例子,比如说要找第11个数,发现它是个5位数,所以最高位是个1,然后它还是5位数里的第4个数。这时要找第三个数了,因为后面... 阅读全文
posted @ 2015-03-28 13:23 AOQNRMGYXLMV 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 这个题和UVa11529很相似。枚举一个中心点,然后按极角排序,统计以这个点为钝角的三角形的个数,然后用C(n, 3)减去就是答案。另外遇到直角三角形的情况很是蛋疼,可以用一个eps,不嫌麻烦的话就用整数的向量做点积。 1 #include 2 #include 3 #include 4 us... 阅读全文
posted @ 2015-03-28 10:20 AOQNRMGYXLMV 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 和UVa11077的分析很类似。我们固定左脚的鞋子不动,然后将右脚的鞋子看做一个置换分解。对于一个长度为l的循环节,要交换到正确位置至少要交换l-1次。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 bool vis[... 阅读全文
posted @ 2015-03-27 23:09 AOQNRMGYXLMV 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 我看大多数人的博客只说了一句:找规律得答案为(n + m) / gcd(n, m)不过神题的题解还须神人写。。We can associate at each cell a base 3-number, the log3(R) most significant digits is the index... 阅读全文
posted @ 2015-03-27 18:09 AOQNRMGYXLMV 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 枚举一个中心点,然后将其他点绕着这个点按照极角排序。统计这个中心点在外面的三角形的个数,然后用C(n-1, 3)减去这个数就是包含这个点的三角形的数量。然后再枚举一个起点L,终点为弧度小于π的点R。在[L+1, R]任取两点再加上起点,这些三角形都不包含中心点。 1 #include 2 #inc... 阅读全文
posted @ 2015-03-26 23:20 AOQNRMGYXLMV 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 用6种颜色去染正方体的12条棱,但是每种颜色都都限制了使用次数。要确定正方体的每一条棱,可以先选择6个面之一作为顶面,然后剩下的四个面选一个作为前面,共有24种。所以正方体的置换群共有24个置换。具体每种置换的情况就是:UVA 10601 Cubes幸运的是,任意一个置换中的循环节长度都是相同的(有... 阅读全文
posted @ 2015-03-26 19:49 AOQNRMGYXLMV 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 这种1A的感觉真好 1 #include 2 #include 3 #include 4 using namespace std; 5 typedef long long LL; 6 7 struct Point 8 { 9 LL x, y;10 Point(LL x=0, ... 阅读全文
posted @ 2015-03-26 14:38 AOQNRMGYXLMV 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 如果用容斥原理递推的办法,这道题确实和LA 3720 Highway很像。看到大神们写的博客,什么乱搞啊,随便统计一下,这真的让小白很为难,于是我决定用比较严格的语言来写这篇题解。整体思路很简单:m*n的方格,其格点是(m+1)*(n+1)的点阵,选三个点有C((m+1)*(n+1), 3)中情况,... 阅读全文
posted @ 2015-03-26 12:44 AOQNRMGYXLMV 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 从反面考虑,统计非单色三角形的个数。如果从一个点出发两条不同颜色的边,那么这三个点一定构成一个非单色三角形。枚举一个顶点,统计从这个点出发的红边的个数a[i]和蓝边的个数n - 1 - a[i],这样以该点为顶点的非单色三角形的数目为a[i] * (n - 1 - a[i])由于每个单色三角形计数了... 阅读全文
posted @ 2015-03-25 21:53 AOQNRMGYXLMV 阅读(247) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 34 下一页