1.指针基础 1.引用 C++有一个东西叫引用,引用相当于给对象(如:变量)起了另一个名字,引用必须用对象初始化,一旦初始化,引用就会和初始化其的对象绑定在一起,就是说引用的值就是被引用的对象的值,引用的值被修改时被引用的对象也会被修改,但不能定义引用的引用,因为引用不是对象,引用定义方式: 类型 …

题目大意 从一个序列中,找出k段连续的子序列,且每个子序列的长度不小于L,不大于R。 一个序列的权值定义为序列中所有数的和,求k个子序列和的最大值。具体看原题。 Solution 这道题应该用主席树来做,但是太麻烦。相比起来,ST表+堆的算法显然比较方便(可能我代码写得太丑)。 考虑每次取出一段最大 …

1.按秩合并的操作 相信大家都知道并查集(不相交集合森林),由于路径压缩优化后时间复杂度分析极难,不易理解,本文来讨论下一种易于分析的优化方式:按秩合并。按秩合并的时间复杂度是O(lgn)的,常数很小,虽然不是特别优秀,但在许多情况下也够用了。 按秩合并的方式就是,对于每一个结点x记录下一个秩(x. …

题目传送门 先来考虑如何快速的求出一个子串的出现次数,那就建一个后缀自动机,预处理出每一个节点的|right(x)|,然后找到子串对应的节点就好了。但是如果从root开始转移的话太慢了,而且不好优化,所以可以尝试倒着来。在建sam的时候顺便记录s[1..x]所对应的节点,对于子串s[l..r],其所 …

题目传送门 看到题目描述的最后一句话,意思是这棵树最多只有20个叶子节点,这个限制很奇怪,也是本题的突破口。考虑任意一条链组成的字符串,不难发现都会被起点为某一个叶子的字符串包含。由于叶子节点的个数非常少,所以可以将以这些节点为起点的路径组成的字符串全部加入到一个广义后缀自动机里,然后就可以直接统计 …

                              浅析C++类 1.类成员 1.从struct到class 大家应该都知道C++中的struct吧,其只是一个C++类的特殊形式。 struct A{ //内容 }; 类用class表示,上述代码就相当于: class A{ public: …

我能表示自己不会做吗。 好吧。 其实这道题就是个裸的KMP 但我一开始竟然没有看出来 显而易见的是,如果要添加几个字符的话,肯定是字符串的循环节缺了一部分 所以答案是 (n-fail[n])-n%(n-fail[n]) Code: #include<cstdio> #include …

题目大意 给一个森林,森林有n个节点m条边。 现在有两种操作: Q x y k 表示询问x-y这条链上点权的第k小。保证x,y在同一个连通块里。 L x y 表示链接x,y两点。保证x,y在不同的连通块里。 总共有T次操作,要求强制在线,last表示上一次的答案,每次x,y,k都要异或last.la …
BZOJ1188 分裂游戏

题目传送门 Description 有n堆石子,每次可以选三堆(i,j,k),满足i<j<=k,从i中取出一颗石子,在j和k中各放入一颗,发现有先手必胜的策略,问第一步有多少种取法并输出字典序最小的一组 Solution 一道博弈论的题目,可以发现对于每一堆石子,数量不是关键,关键在于奇 …

这道就是纯KMP,QAQ。 你只要把这两个字符串合在一起求一遍KMP就可以了 注意最后输出的总长度必须小于等于min(len1,len2). Code: #include<cstdio> #include<cstring> #include<algorithm> …