摘要: 在大佬的 blog 上看到的树上距离问题转化为括号序列求解的技巧。 就是在 dfs 的时候,某个节点入栈时加入左括号,出栈时加入右括号。 那么对于树上两点的距离,就是他们中间未匹配的括号数量。因为匹配的括号必定不存在于他们之间的路径上,其他的都存在于他们的路径上。 然后这道题我们维护树上两个黑点之间 阅读全文
posted @ 2020-09-12 22:59 Nylch 阅读(62) 评论(0) 推荐(0) 编辑
摘要: 一道挺好的题,刚刚开始的时候没什么思路,后来认真考虑了一些性质就会做了。 题意是给出一个 01 串 \(s\),\(|s| \leq 2 \times 10^5\),每次可将任意子串 $011$ 变成 $110$ 或者将 $110$ 变成 $011$。有 \(q\) 次询问,每次询问两个等长的子串, 阅读全文
posted @ 2020-09-12 22:57 Nylch 阅读(73) 评论(0) 推荐(0) 编辑
摘要: A 统计 A 会做但 B 不会做的题目数量和 B 会做但 A 不会做的数量,无解就是 A 会做但 B 不会做的题目数量为 $0$,输出 -1,有解就输出这两个的和除以 A 会做但 B 不会做的题目数。 #include <bits/stdc++.h> #define reg register #de 阅读全文
posted @ 2020-09-12 22:54 Nylch 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 首先按照套路,我们按位考虑,那么就变成统计 $0$ 和 $1$ 两种情况的组合的数目,最后乘2的某次幂。 那么记 \(dp_{i,j,0/1}\) 表示经过以 \(i\) 为根的子树的每一个节点,在第 \(j\) 位上产生了多少个 $0$ 或 $1$,然后 dfs 一遍,用儿子的答案更新父亲的答案, 阅读全文
posted @ 2020-09-12 22:52 Nylch 阅读(71) 评论(0) 推荐(0) 编辑
摘要: 相邻两个是相等高度的才能达到任意高度,像 1221 这种也不行。如果最后剩下一个未匹配成功的,那么一定要是最高的。(因为只能横着放) 那么用栈维护一下就好了。 #include <bits/stdc++.h> #define reg register #define ll long long #de 阅读全文
posted @ 2020-09-12 22:50 Nylch 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 首先记 \(sum_i\) 表示 \([1,i]\) 中整除对的数量,那么每次询问的答案就是 \(sum_r-sum_l-\) 左端点在 \([1,l]\),右端点在 \([l,r]\) 的整除对。那么考虑离线处理,对于每个询问 \([l,r]\),当 \(l=i\),\(sum_r-sum_{l- 阅读全文
posted @ 2020-09-12 22:49 Nylch 阅读(71) 评论(0) 推荐(0) 编辑
摘要: 首先 \(f(j)=\displaystyle|\sum_{i=1}^{n}(-1)^{i-1}a_i+(-1)^ib_{i+j}|=|\sum_{i=1}^{n}(-1)^{i-1}a_i+\sum_{i=1}^{n}(-1)^{i}b_{i+j}|\) 我们先处理出 suma,表示 \(\dis 阅读全文
posted @ 2020-09-12 22:48 Nylch 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 首先可以转化为在第 \(i\) 次操作,可以选择不做,也可以选择把 \(pos\) 位置上的数减去 \(k^i\),问能否经过若干次操作把所有数字变成 $0$。 然后由此可以想到 \(k\) 进制,把每个数分解,记分解完的第 \(i\) 为 \(x_i\),那么根据题目要求 \(x_i\) 不能大于 阅读全文
posted @ 2020-09-12 22:47 Nylch 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 首先很自然的想到用并查集。 我们统计每个人与多少个人有直接朋友关系,统计每个人与多少个人不能有朋友关系,再统计每个人与多少个人有朋友关系。那么根据容斥原理,答案就是每个人与多少个人有朋友关系 \(-\) 每个人与多少个人有直接朋友关系 \(-\) 每个人与多少个人不能有朋友关系 \(-1\),这里减 阅读全文
posted @ 2020-09-12 22:46 Nylch 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 首先 \(f(x,y)=x\) \(or\) \(y-y=x\) \(and\) \(y\),那么我们只需要枚举每一位,看是否有且仅有一个数的第 \(i\) 位为 $1$,如果有,则将它放在第一个。 #include <bits/stdc++.h> #define reg register #def 阅读全文
posted @ 2020-09-12 22:44 Nylch 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 首先有个显然的性质:\(\gcd(F_a,F_b)-F_{\gcd(a, b)}\),其中 \(F\) 指斐波那契数列。 那么问题就转化成在区间 \([l,r]\) 中找 \(k\) 个不同的数字使得这些数字的最大公约数最大。 那么在一个区间 \([l,r]\) 中,有因子 \(x\) 的数的数量是 阅读全文
posted @ 2020-09-12 22:43 Nylch 阅读(75) 评论(0) 推荐(0) 编辑
摘要: AT 的题质量就是高。 首先我们发现题目要我们求 \(\displaystyle\sum_{i=1}^{n}\sum_{j=i+1}^{n} \binom{a_i+a_j+b_i+b_j}{a_i+a_j}\)。 然后直接预处理组合数过不了。 那么我们想想这个东西的组合意义是什么。 对,就是求从 \ 阅读全文
posted @ 2020-09-12 22:41 Nylch 阅读(59) 评论(0) 推荐(0) 编辑
摘要: 一道有点难想的 dp。 记 \(dp_{i,j,k}\) 表示第 \(i\) 个位置,与当前位置颜色不同的球最后出现的位置为 \(j\),与这两种颜色都不同的球最后出现的位置为 \(k\) 的方案数。 转移分成三种: 第 \(i+1\) 个位置的颜色与第 \(i\) 个位置的颜色相同,从 \(dp_ 阅读全文
posted @ 2020-09-12 22:40 Nylch 阅读(75) 评论(0) 推荐(0) 编辑
摘要: 首先记 \(f_u\) 表示 \(u\) 不被以 \(u\) 为根的子树内点通上电的概率。 不难列出这样一个式子: \(f_u=\displaystyle(1-p_u)*\prod_{v \in subtree\ u}f_v*e(u,v)\) 其中 \(p_u\) 表示直接充 \(u\) 的概率。 阅读全文
posted @ 2020-09-12 22:37 Nylch 阅读(72) 评论(0) 推荐(0) 编辑
摘要: 题目大意 给出一个长度为 \(n\) 的序列 \(a\), 给出 \(m\) 个查询 \(l\) ,对于每个查询输出 \([l,n]\) 的区间内不同数的个数。 分析: 将查询按照 \(l\) 的大小排序,从大到小的遍历,每次将 \(>=\) 当前 \(l\) 的位置的 \(a[i]\) 全部加入树 阅读全文
posted @ 2020-09-12 22:34 Nylch 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 首先发现如果一个数中含有平方因子,那么去掉平方因子不会对答案产生影响。 所以对于一个串,去掉平方因子后,有多少种不同的数,权值就是多少。 #include <bits/stdc++.h> #define reg register #define ll long long #define vi vec 阅读全文
posted @ 2020-09-12 22:32 Nylch 阅读(91) 评论(0) 推荐(0) 编辑