随笔分类 - OI
摘要:题意:给定两种限制:1、编号为i的航班必须在ki+1之前起飞 2、(a,b)表示a必须在b之前起飞。求:1、一个合法起飞序列 2、每个航班在所有合法起飞顺序中,最早的起飞时间。问题保证有解 题解:首先按照第二个限制条件建图,那么第一问随便跑一个拓扑序就好,关键在第二问,我们枚举每一个飞机,假定该飞机
阅读全文
摘要:题意:给定N个有A C G T组成的字符串,求长度为L的仅由A C G T组成的字符串中有多少个是不含给定的N个字符串的题解: 首先我们把所有的模式串(给定的DNA序列)建Trie,假定我们有一个匹配串,并且在匹配过程到S[i]这个字符时匹配到了Trie上的某个节点t,那么有两种可能: 匹配失败:t
阅读全文
摘要:题意:给定三个操作:1、在当前字符串的末尾添加一个字符c 2、在当前字符串的末尾删除一个字符 3、记录当前字符串并对其标号。再给出N组询问,每组询问需回答第x个字符串在第y个字符串中出现的次数 题解: 首先按照如下规则建Trie,设当前节点为t,第i个字符串的结尾在Trie中的位置为mark[i]:
阅读全文
摘要:题意:给定N个字符串,设S为N个字符串首尾相连组成的字符串,查询每个字符串在S中出现的次数。 题解: 首先我们在构造Trie的时候,将构造过程中经过的节点的cnt全部++,此时cnt中记录该模式串被多少个模式串包含。 如果A为B的子串,B为C的子串,显然A也是C的子串,因此我们从下往上回溯,每回溯到
阅读全文
摘要:题意:给定一个字符串,维护:1、修改某个位置的字符 2、查询从p、q位置开始相同字串的长度 3、在某个位置后面插入一个字符 题解:因为需要支持修改所以很容易想到用平衡树,每个节点维护该节点子树所构成的字串的Hash值,修改和插入不用多说,查询我们二分答案,然后在Splay上查询即可。 #includ
阅读全文
摘要:题意:给定N个字符串,求这N个字符串中有几对字符串有且仅有一位不同 题解:首先双哈希存下来,枚举删除哪一位,枚举每一个字符串删除后的哈希值,对哈希值排序之后看有多少个相同的,每组大小为n的相同字符串集对答案的贡献为$C_n^2$ #include <cstdio> #include <cstring
阅读全文
摘要:题意:给定一个字符串,求最短的循环节使之循环后能构成这个字符串 题解: 根据next的性质,如果长度为L的字符串next[L]=i,则S[i+k-1]==S[i-(L-i+1)+k-1],同时我们不断的拆分下去,直到最小的一部分,这最小的一部分一定是和L-i+1到L相同的,也就是说如果最小的那一部分
阅读全文
摘要:题意:给定一个字符串,求字符串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这个因子的组数,这玩意
阅读全文
摘要:题意:求x∈[1,N],y∈[1,M]中gcd(x,y)为质数的数对的数量。 题解: 这个题把BZOJ2301中的k改成枚举素数就能过啦……才怪,不过和那个题的思路类似,但我们不枚举每一个质数,而是直接枚举质数p的倍数T,得到\[{f_{A,B,p}} = \sum\limits_{p|T} {[{
阅读全文
摘要:题意:N组询问,每次给出a b c d k,求满足a≤x≤b,c≤y≤d且gcd(x,y)=k的数对(x,y)的数量。 题解: 设fA,B,k表示1≤x≤A,1≤y≤B内合法数对的数量,那么答案就是fb,d-fa,d-fb,c+fa,c。设FA,B,i=i|gcd(x,y)(i=tk,1≤x≤A,1
阅读全文
摘要:题意:求[1,N!]中与M!互质的数的个数对R取余,多组询问,模数相同 题解: 如果a与b互质,显然kb+a依然与b互质,因此答案就是\[\frac{{N!}}{{M!}}\varphi (M!) = N!\prod\limits_{{p_i}|M!} {\frac{1}{{{p_i}}}} \]
阅读全文
摘要:题意:分别求所有质因数都不同且质因数个数为奇数个、偶数个的数的欧拉函数和,和质因数存在重复的数的欧拉函数和 题解: 说书题……前面一大串就是用一种比较有趣的语言定义欧拉函数。 显然我们只需要求出所有军人ans1和政客ans2,然后用求得的M减去独立数和就是学者的独立数和了。 由于善良的出题人已经帮我
阅读全文

浙公网安备 33010602011771号