随笔分类 - 题解
摘要:注意到两次涂色的区间要么不相交,要么一个包含另一个。如果两个区间只有一部分相交,那我们可以把左侧区间的右端点左移,使其不相交而不改变涂色结果。 基于这个结论,我们考虑区间 dp。设 \(f_{l,r}\) 表示将区间 \([l,r]\) 涂成目标颜色的最小操作数,从 \(f_{l,r-1}\) 转移
阅读全文
摘要:给定一个长度为 \(n\) 的字符串 \(s\),进行 \(q\) 次询问。每次询问一个字符串 \(t\),问在 \(t\) 后面 最少 添加多少个字符,能使得 \(t\) 不再是 \(s\) 的一个子序列。数据范围 \(n\le 10^6, \sum |t_i|\le 1e6, q\le 2\ti
阅读全文
摘要:如果我们有一个最优的操作序列,我们可以随意重排它而不影响结果,所以不妨先处理所有的减法,把加法留到最后。也就是说,我们要先设法把序列减成同一个数。 如果直接考虑 \(a_i\) 可能没有什么头绪,所以尝试考虑差分。设 \(d_{i+1}=a_{i+1}-a_i\),我们的目标从“把所有的 \(a_i
阅读全文
摘要:你需要维护一个在数轴上的线段的集合 \(S\),支持两种操作: A l r 表示将 \(S\) 中所有与线段 \([l,r]\) 相交的线段删去,并将 \([l,r]\) 加入 \(S\) 中。 B 查询 \(S\) 中的元素数量。 对于 A 操作,每次还需输出删掉的元素个数。 这道题可以用 std
阅读全文
摘要:给定一个 \(n\times m\) 的矩阵,元素 \(a_{i,j}\in\{1,-1\}\)。只能向下或向右走,判定是否存在一条从 \((1,1)\) 到 \((n,m)\) 的路径,走过的元素和为 \(0\)。\(n,m\le 1000\)。 首先,如果路径长度 \(n+m-1\) 是奇数,则
阅读全文
摘要:给定一棵 \(n\) 个节点的树,起点 \(st\) 和终点 \(en\)。要求一个排列 \(p_i\),使得从 \(st\) 出发,第 \(i\) 步向 \(p_i\) 方向走一步(顺着当前位置 \(u\) 到 \(p_i\) 的简单路径走一步,\(u=p_i\) 时不移动),\(n\) 步后能恰
阅读全文
摘要:Alice 和 Bob 轮流对正整数 \(n\) 进行操作。每次操作减去当前的 \(n\) 的一个因子 \(d,d\neq 1,d\neq n\)。不能操作判负。 如果 \(n\) 是质数,显然先手必败。如果 \(n\) 不是质数,我们分三种情况讨论: \(n\) 为奇数; \(n\) 为偶数但不是
阅读全文
摘要:题目要求区间 \([l,r]\) 内各位数字之和与各位数字之积相等的整数个数,不难想到数位 dp。因为没有注意到 \(9\) 个\(0-9\) 整数的乘积状态数只有 \(3000\) 左右,试图用【AHOI2009 同类分布】的做法。原题是求出 \([l.r]\) 中各位数字之和等于原数的个数,做法
阅读全文
摘要:我们把白花和红花想成 01,\(\text{RWWR}\) 变成 01 串,则题意抽象出来是:一个 01 串是好的,当且仅当任意连续 0 段长度为 \(k\) 的倍数。\(t\) 次询问,所有长度在 \(a_i,b_i\) 之间的 01 串中有多少个是好的。\(t,k,a_i,b_i\le 10^5
阅读全文
摘要:给定 \(x\),求一个 \(y<x\) 使得 \(x,y,x\oplus y\) 构成非退化三角形。根据三角形不等式进行推导: \(x+y>x\oplus y \to x\oplus y+2(x\&y)>x\oplus y \to x\&y>0\); \(y+x\oplus y>x \to y+(
阅读全文
摘要:注意到,要求一个值域是 \(\{1,-1\}\) 的序列的子段和有多少种不同的取值,实际上就是求它的最小子段和 \(a\) 到最大子段和 \(b\) 之间有多少个整数。因为可以证明,每个处于 \([a,b]\bigcap Z\) 中的数,都至少有一个子段与之对应——要得到和为 \(b-1\) 的子段
阅读全文
摘要:“同种颜色的边不成环”可以等价转化为“同种颜色的边构成森林”,所以同种颜色的边最多 \(2n+m-1\) 条。总共有 \(n\) 种颜色,所以合法的最大边数为 \((2n+m-1)n\)。 有解条件 \((2n+m-1)n\ge 2nm\),化简得 \(m\le 2n-1\)。 处理完了无解情况,下
阅读全文
摘要:发现 \(k\le10^9\),肯定不能直接模拟了。但是注意到,如果最小值 \(\min\times m>\max\) 存在,我们可以直接给每个数乘上 \(m^{\lfloor\frac{k}{n}\rfloor}\),最后再处理剩下的 \(k\bmod n\) 个 \(m\) 即可,这个复杂度是
阅读全文
摘要:C - 11/22 Substring 枚举每个 /,从 / 出发向左右两边扩展到最远。因为每个点最多能被访问一次(向右只扩展 2,向左只扩展 1),复杂度为 \(O(n)\)。 int ans = 0; for (int i = 0; i < n; i++) { if (s[i] != '/')
阅读全文
摘要:C - Kaiten Sushi 把寿司都放到一个堆里,从前往后扫 \(A\) 数组,如果当前食客 \(A_i\) 小于等于堆顶,就取出堆顶,记录这份寿司被第 \(i\) 个人吃掉。复杂度 \(O(n\log m)\)。 D - Keep Distance 搜索回溯,但每一步从 \(10\) 枚举到
阅读全文
摘要:A. King Keykhosrow's Mystery 题意可以转化为存在 \(k_1,k_2\) 使得 \(m=a\times k_1+n = b\times k_2 +n\)。消去余数 \(n\) 得到 \(a\times k_1=b\times k_2\),即 \(a,b\) 的公倍数。所以
阅读全文
摘要:B. Shohag Loves Strings 注意到两个相同字母 aa 的 \(f(p)\) 为偶数,所以如果找到两个相邻相同字母输出即可。如果没有相邻相同的两个字母,则说明字符串相邻的字母一定不同,再考察三个相邻的字母的情况,发现三个字母均不同,如 abc 时 \(f(p)\) 也为偶数,又找到
阅读全文
摘要:A. lz的吃饭问题 print("lz" if (lambda a,b: a*b)(*map(int, input().split())) < (lambda a,b: a*b)(*map(int, input().split())) else "gzy") B. lz的数字问题 把数字按字符串处
阅读全文
摘要:首先考虑计算 \(f([a_1, a_2,\cdots,a_k])\):发现对于在同一条斜线上的 \(a_i\), \(a_i-i\) 的值是相同的。统计出 \(a_i-i\) 的众数 \(x\),则 \(k-x\) 次操作就可以将这一段变成连续数组。 处理好了第一个长度为 \(k\) 的段,向右滑
阅读全文
摘要:D 根据题目给出的构造方式,\(S_n'\) 的长度会达到 \(2^n\) 数量级,没法求出 \(S_n'\),所以考虑递推。 设 \(dp_{i,l,r}\) 为 \(S_i'\) 里 \(T\) 的 \([l,r]\) 区间以子序列的方式出现了多少次,可以写出转移方程:\(dp_{i,l,r}
阅读全文

浙公网安备 33010602011771号