摘要:
题意:给定一个字符串,求字符串S的前i个字符构成的子串,既是它的后缀同时又是它的前缀,并且该后缀与该前缀不重叠的最长子串的长度。 题解: 一开始看错题了,以为是求最长的满足要求的前后缀,结果样例都搞不出来,直到看了别人的题解才顿悟QAQ 顿悟就顿悟了,以前写的0角标开始的next数组next[0]= 阅读全文
摘要:
题意:给定一棵树,求树中长度为三的倍数的路径条数 题解:定义c[i]为一颗子树中每个节点到根的距离%3等于i的路径数量,和poj1741一样,我们只需要找出只在一颗子树中的路径,就是c[1]*c[2]*2+c[0]*c[0] #include <cstdio> #include <cstring> 阅读全文
摘要:
题意:给定一棵树,求树中长度小于等于K的路径条数。 题解: 分治重在思想,没有固定的算法——对于本题中某一子树上的任意一条路径,其要么是经过该子树的根,要么不经过,不经过的情况分治到子树上,我们只用考虑经过子树的根的情况。 由于经过了根节点,所以该路径的起始点一定是在根节点的两颗子树上,但直接求解方 阅读全文
摘要:
题意:给定一个数列,每次交换两个数后,输出序列中逆序对的数量。 题解: 比树套树神马的好写了多了,虽然时间理论上应该慢一些,但是绝不会MLE 首先我们离散化,由于交换(x,y)只会对(x,y)之间的数产生影响,因此我们讨论x<i<y a[i]<a[x] --ans a[i]>a[x] ++ans a 阅读全文
摘要:
题意:给定一个颜色序列,维护:1、单点修改 2、区间查询不同颜色的种数 题解: 定义f[i]为i左边第一个和i颜色相同的位置,用分块来维护f。 询问:看区间中有多少个位置的f[i]<l 更新:暴力枚举p左右最近的与p颜色相同的位置,更新即可 #include <cmath> #include <cs 阅读全文
摘要:
题意:给定一个数列,维护:1、单点修改 2、查询区间第k大 题解: 找个代码debug网上全是树套树。 然而还是喜欢这么写分块,开个结构体什么的看起来很一目了然不是吗…… 先把每个块排序 修改:二分找到修改的位置在块中的位置,然后移动到修改后应该在的块中的位置。 查询:确定上下界后二分答案,看每个答 阅读全文
摘要:
题意:给定一个数列,维护:1、[L,R]之间所有的数+=W 2、求[L,R]中大于等于C的数的数量 题解:更新用add标记,头尾俩块暴力重构;查询将每个块排序然后二分找。 #include <cmath> #include <ctime> #include <cstdio> #include <cs 阅读全文
摘要:
题意:给定N,M,求$\sum\limits_{i = 1}^N {\sum\limits_{j = 1}^M {lcm(i,j)} }$,多组询问 题解: 设$F(x,y) = \sum\limits_{i = 1}^x {\sum\limits_{j = 1,\gcd (i,j) = 1}^y 阅读全文
摘要:
题意:T组询问,每组询问给出N,M,a,有一张N×m的数表,其第i行第j列(1≤i≤N,1≤j≤M)的数值为能同时整除i和j的所有自然数之和。给定a,计算数表中不大于a的数之和。 题解: 首先我们预处理出来所有数的约数和,也就是F函数,定义g(i)=1到N和1到M中gcd含有i这个因子的组数,这玩意 阅读全文