11 2020 档案
摘要:题目链接:https://codeforces.com/contest/1457/problem/D 错误做法:以为只有连续异或一段数的情况,直接上trie, wa 在 51 个点上 后来发现还有一种情况: 左边连续一段异或起来大于右边连续一段异或起来 正确做法:构造,序列中如果连续三个数最
阅读全文
摘要:链接:http://oj.lovelyanqi.com/contest/3 H: 首先翻译一下权值,意思就是将原来排列中的 i 换成了权值排名为第 i 个的数, 我们发现,只需要20位的排列就可以占满 1018 个排名了,所以只需要先把排列前面所有的位置答案算好, 然后暴力统计
阅读全文
摘要:题目链接:https://codeforces.com/problemset/problem/1443/E 我们发现,排列的排名最多只会是 1010,所以最多只会修改 15 个位置 我们记录一下当前的排列排名是多少,然后只需要暴力进行逆康托展开,求出当前排名下的排列,暴力修改即可 求和用树
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P5367 康拓展开:建立起排列和自然数的双射关系,可以用来求解排列的哈希值 设给定一个排列 a,则 a 在排列集合中的排名为: ans=∑ni=1pi∗(n−i)! 其中 pi 表
阅读全文
摘要:题目链接:http://oj.lovelyanqi.com/problem/L04%20K 想知道 [0,x] 之内有多少个回文数, 假设 x 有 c 位,我们可以先预处理出前 c−1 位内 (99....99) 的答案 然后再加上 10^ 到 \(
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 数位dp模板题 数位dp学习博客:https://www.sohu.com/a/273617542_100201031 #include<cstdio> #include<cstring> #in
阅读全文
摘要:题目链接:https://darkbzoj.tk/problem/3507 以通配符为分界点将原字符串分开,通配符也算一个字符串 dp[j][i] 表示到第 j 个匹配字符串能否匹配到第 i 个位置 分情况转移即可 #include<bits/stdc++.h> using
阅读全文
摘要:题目链接:https://codeforces.com/problemset/problem/1446/B LCS 的改版, f[i][j] 表示以 i,j 结尾的最大答案, 如果 A[i]==B[j] ,那么贡献就会加 2, 否则贡献会减 1 #incl
阅读全文
摘要:A. Easy Equation : https://ac.nowcoder.com/acm/contest/8688/A 如果固定一个 x, 那么 x+y 的所有可能取值即为 [x,x+b], 也即 x 对 [x,x+b] 的贡献为 1
阅读全文
摘要:题目链接:https://codeforces.com/problemset/problem/1443/C 贪心 首先,如果配送时间少于自己取的时间,则肯定选择配送 其次,第一步中的配送时间中有一个最大值 M, 而所有配送时间少于 M 的店家都可以选择配送, 将剩下的 配送时间丢进一
阅读全文
摘要:题目链接:https://codeforces.com/problemset/problem/1444/C 第一想法就是暴力枚举所有两个点的子图然后判断二分图 正难则反,考虑补集转化,即不合法的方案数,有两种情况: 存在单色环 存在双色环 所以只需要统计出不含环的单一颜色的数量 cnt 和不
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/submission/code_detail/2916478/ 普通旋转 treap 的重要操作就是 zigzag 以及用堆的性质维持树的平衡 旋转 treap #include<cst
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/254/ 每次找到树的重心,分治下去统计答案(经过当前根节点的路径)即可 统计答案使用了指针扫描数组的方法,要注意去掉同一子树内路径的答案 还可以直接在树上统计子树答案(这个方法的好处是保
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/253/ 莫队算法:对询问分块 先将询问按左端点递增排序,然后将询问分成 √n 块,块内再将询问按右端点递增排序 块内相邻左端点变化不会超过 √n
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/submission/251/ 区间众数 预处理出块[L,R]内的每个数出现次数 #include<cstdio> #include<cstring> #include<algorithm> #include
阅读全文
摘要:https://www.acwing.com/problem/content/244/ 分块入门练习题 大块维护,小块朴素 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath
阅读全文
摘要:https://www.acwing.com/problem/content/description/250/ 考虑以矩形的右上角代表这个矩形, 对于每个星星,考虑能圈住这个星星的矩形的右上角的范围,又因为矩形边界上的星星不算, 所以我们可以假设将星星的横纵坐标都减去0.5,这样矩形的范围就是左
阅读全文
摘要:https://www.acwing.com/problem/content/description/249/ 线段树经典题 首先因为坐标可能是小数,所以要先把坐标离散化 将每个矩形拆成左右两条线段,将每条线段按横坐标排序 线段树每个节点维护两个信息:cnt 和 len 其中 \(c
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/247/ 更相减损术:gcd(a,b)=gcd(a,a−b) 可以扩展到 n 个数,gcd(a,b,c)=gcd(a,b−a,c−b) 于是可以用线段树
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/246/ 经典题,动态维护最大字段和 线段树节点内除了 sum 外,还要维护左起最大子段和,右起最大子段和,最大子段和 #include<cstdio> #include<cstr
阅读全文
摘要:https://www.acwing.com/problem/content/245/ 线段树维护一个01序列,b[i]=1表示身高为i的牛是否出现过,倒着扫一遍, 每次找到第a[i]+1个1(未出现过的身高)就是当前牛的身高,并把该位置变成0 线段树上二分查找即可
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/241/ 并查集的一个重要功能就是动态维护具有传递性的关系, 比如:相等,奇偶性等等 如果传递关系只有一种,比如相等,那就使用普通的并查集来维护即可 如果传递关系不只有一种,比如本题的奇偶
阅读全文
摘要:https://www.acwing.com/problem/content/240/ 除了位于哪个集合的fa[i]之外,还要维护一个dis[i],表示该元素在当前集合的深度 路径压缩的时候,沿途更新之前合并过去的元素的dis, 同时还要维护集合的大小sz, 用于更新dis #i
阅读全文
摘要:https://www.acwing.com/problem/content/239/ 离线,离散化 i,j 的编号, 先处理 xi=xj 的操作,将 i,j 合并, 再查询 xi=xj 的操作,看 i,j 是否在同一个集合里 #include
阅读全文
摘要:https://www.acwing.com/problem/content/173/ 折半搜索经典题目 按重量从大到小排序搜索 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cm
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/170/ 剪枝剪枝剪枝。。 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> #i
阅读全文
摘要:https://www.acwing.com/problem/content/description/169/ 剪枝剪枝还是剪枝 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cm
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/166/ 拓扑排序: 对于图中每条边(x,y), 如果在序列A中,x 始终出现在 y 的前面,则称序列 A 为该图的拓扑序 用 bfs 求解拓扑序,
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/160/ 最小表示法模板题 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> #i
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/147/ 贪心策略: 将商品按时间排序,维护一个小根堆,如果当前商品过期天数等于堆中商品数量, 且当前商品价值大于堆顶商品,则将堆顶弹出,插入当前商品; 如果当前商品过期天数大于堆中商品数量,则之间将商品插入堆中
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/146/ 令 D[i] 表示 i 到根路径上的值的异或之和, 则根据异或的性质,u,v 间路径的异或和即为 D[u]D[v] 所以问题就变成了在 D 中选出异或值最大
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/145/ 把每个整数看成长度为 32 位的 01 串,插入trie树, 根据异或运算的性质,要得到最大的异或值,那每次要尽量沿着与当前数字相反的方向走 #include<cstdio> #includ
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/144/ Trie板子题 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cmath> #in
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/143/ 引理:S[1 i] 具有长度为 len<i 的循环元的充要条件是 len 能整除 i, 并且 \(S[len+1~i] = S[1~i-len
阅读全文
摘要:https://www.acwing.com/problem/content/141/ 哈希做法: 对于每个回文串,长度要么是奇数,要么是偶数 如果长度为奇数,那么枚举中间点,二分长度,用哈希判断左右字串是否相等 如果为偶数,则枚举中间空格 预处理出前缀和后缀字串的哈希值,则可以在O(1)时间内
阅读全文
摘要:https://www.acwing.com/problem/content/138/ 找前驱和后继,set基本操作 加哨兵节点 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<cm
阅读全文
摘要:https://www.acwing.com/problem/content/description/135/ 优先队列,每次将最长的蚯蚓取出来,切开后减去当前的偏移量,再放回队列 但 m 的范围是 7e6,显然需要线性做法 线性做法,那就需要考虑一下蚯蚓长度的单调性了, 可以证明,如果
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/133/ 维护一个栈,使得栈内矩形高度单调递增, 如果当前矩形比栈顶高度高,则之间入栈, 否则不断取出栈顶,直到栈为空或栈顶高度比当前矩形小 出栈过程中累计被弹出的矩形的宽度之和,没弹出一个矩形,就用其高度乘上累
阅读全文
摘要:https://www.acwing.com/problem/content/125/ 可以发现,横纵坐标的移动是分开的, 所以先对 y 轴进行操作,就是普通的货仓选址问题 再考虑 x 轴,最终的排列,士兵的排列顺序一定是不变的, 假设第一个士兵移动到的位置是a 那么答案就是$\
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/124/ 环形均分纸牌,求出前缀和后转化为货仓选址问题 #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #inc
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/123/ 最朴素的做法是,暴力枚举每个正方形,维护前缀和判断是否符合条件,但是坐标范围太大 注意到只有 500 个点,所以可以将坐标离散化一下 正方形的边长显然满足二分性,所以二分边长即可
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/122/ 给定 n 个等差数列,每个数字的位置上存在一个盾牌,保证最多有一个位置的盾牌数量是奇数,找到这个位置 对于一个等差数列,设其首项为 A, 公差为D, 则该数列
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/121/ 经典问题,平面最近点对,使用分治来解决 把所有点按横坐标排序,分治求解距离 合并时将两边的最近点对距离也比较一下 属于不同集合的点比较距离时判断一下即可 #include<cstdio> #includ
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/111/ 倍增 + 二进制划分思想, 选定区间左端点L, 不断向右扩展2的幂次长度,检验区间的合法性即可 复杂度怎么证明? O(Nlog2N) #include<cstdio> #inclu
阅读全文
摘要:https://www.acwing.com/problem/content/109/ 归并排序求逆序对模板题 每次合并的时候,对答案的贡献即为在当前左边区间元素被排序之前先被排序的右边区间元素的数量 #include<cstdio> #include<cstring> #include<algor
阅读全文
摘要:https://www.acwing.com/problem/content/108/ 维护一个大根堆,一个小根堆,设当前序列长度为M 当前序列从小到大排名1M/2的整数存在大根堆 排名M/2+1M的整数存在小根堆, 如果插入后某一堆元素过多,就把该堆堆顶取出来插入令一个堆, 这样序列的
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/107/ 我们发现: 交换左右相邻的摊点,只会改变某两列的数量,同理,交换上下相邻的摊点有改变某两行的数量 于是我们就可以将行和列分开考虑 而对于行和列:就是经典的均分纸牌问题,不过这里是环形均分纸牌 必然有一种
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/105/ 首先对所有涉及到的语言离散化一下,统计会每种语言的人的个数 然后扫一遍电影,找到知道电影语言最多的人的那个电影 #include<cstdio> #include<algorithm> #include
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/104/ 先考虑一个经典问题,求最大连续子段和,无长度限制: 扫描序列,不断将新的数加入子段,当子段和为负数时,清空当前子段 若有长度限制: 维护前缀和sum,减去i−L之前的前缀和的最小值 对于这道题,
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/103/ 假设初始身高都是H,每次给出关系,就将[l+1,r−1]间的牛的高度减一 运用差分将区间操作转化为单点操作即可 同时,关系可能有重复,map 判下重即可 #include<cstdio>
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/102/ 求出a[i]的差分数列b[i],题目的目的是使b2,…,bn都变为0, 令 p,q 分别为bi中正数和负数之和的绝对值, 优先在$b_2,\ldots,b
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/101/ 维护二维前缀和,扫一遍边长为R的正方形的最大值即可,注意边界不要溢出 #include<cstdio> #include<cstring> #include<algorithm> #include<
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/100/ 为方便运算,城市编号从0开始, 按城市分级递归求解D编号城市的坐标 注意变换后坐标的计算(坐标从(0,0)开始) 四舍五入用即可 #include<cstdio> #includ
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/98/ 设d[n]表示n盘3塔问题的最小步数,f[n]表示n盘4塔问题的最小步数 则f[n]=min1≤i<n2∗f[i]+d[n−i] 其中$f[1] =
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/97/ 有几个重要性质: 每个位置最多被点击一次 若第一行状态固定,那么满足题目要求的点击方案最多只有一种 点击的先后顺序不影响最终结果 于是将每行的状态用二进制数存储,枚举第一行的点击状
阅读全文