摘要:
来源 F- Xor sum (字典树) 我明白了,以后遇到异或就想字典树! 先求异或前缀和,然后从左到右遍历区间右端点,用字典树维护答案,求字典树中与当前右端点最近的、异或和大于k的那个位置! 假设当前右端点为i,i之前的值都插入了字典树,字典树每个结点存储最大的下标。在查询时,访问logk个结点就 阅读全文
摘要:
来源 G - League of Legends(dp+双端队列优化) 类似斜率dp的思想吧,用一个双端队列维护。 首先预处理,如果存在一个大区间包含了一个小区间,可以把大区间拿出来。因为这个大区间要么单独成为一个组,要么加入小区间所在的组,对最优解没有影响。预处理完后剩下的就是互不包含的若干区间。 阅读全文
摘要:
来源 A - Alice and Bob (sg函数打表) 暴力打表,时间复杂度为O(n^3logN)。可以发现后手胜的状态数非常少:如果某堆石头数量是i,另一堆石头最多只有一种数量满足后手胜。 反证法:假设 (i, p) 和 (i, q) 都是后手必胜,且 q > p。那么在状态 (i, q) 时 阅读全文
摘要:
题目 source 题解 对于数组B,每增加1个数,相当于数组A增加2个数。设B中上一个数为x,新加的数为y,如果y>x,那么A增加的两个均大于等于x;如果y<x,那么两个均小于等于x;如果y=x,那么一个大于等于x一个小于等于x。在链表上维护一个指针cur,它始终指向每一步的x。如果y>x,y位于 阅读全文
摘要:
题目 source 题解 直接计算似乎十分困难,那么可以单独考虑每个数x的贡献。$B_x$为最后$x$存在于队列中的方案数,那么答案就是$\sum{x\times B_x}$。 对于每条类型2的指令I,假设它的值为X,它的方案数可以用dp计算得到。令dp[i][j]代表在第i条指令时队列内比X小的数 阅读全文
摘要:
题目 source 题解 问题转化:1可以隔着一个1和0交换位置,等价于将两个连续的1看作一个整体,这个“11”可以与相邻的任意元素交换位置。 统计字符串中有多少组“11”(每个1至多属于1组),于是字符串等价于由“11”,“1”,“0”组成。假设“11”个数是n,“0”的个数为m,不同的情况数等价 阅读全文
摘要:
题目 source 题解 由于$998241383=673 \times 937 \times 1583$,故最多枚举1583项后剩余的f值为0,直接暴力算,时间复杂度O(1583n) 不能用逆元!本来想分解质因数后算完用CRT合并,但是忘记了最多1583项后结果出现0,导致逆元出错。调了巨久。阶乘 阅读全文
摘要:
题目 source 题解 将区间[L,R]视作坐标系中的点(L,R),那么添加线段[L,R]就是在坐标系上添加点(L,R);查询[L,R]就是查询范围{(l,r)|l >= L and r ⇐ R}对应的矩形范围内的最大值和最小值的差值。由于只有添加没有删除,可以使用二维树状数组;或者使用树套树,支 阅读全文
摘要:
题目 source 题解 一眼看出是kmp+数位dp,然后就掉坑里了。。。 数位dp显然时间会爆。观察数据范围,发现k长度最多为5,加上mod11的11个余数,最多有55个状态,可以使用矩阵快速幂。 假设$f_{i,j}$代表余数为i,当前匹配位置为j的结果。任意写出递推式,直接套矩阵快速幂。初始只 阅读全文
摘要:
题目 source 题解 方法一: 可以知道,最多35位Fibonacci数列就可以表示1e7的数。可以发现,前23位表示的数存在大量重复。因此可以先预处理出前23位的结果,然后剩下12位和预处理结果暴力卷积。前23位预处理最大的数为75024,剩下4096的需要处理,故最多计算75024*4096 阅读全文