摘要:
把原字符看成 $X$,每个位置看成 $Y$,每种字符向每个能去的位置连边,就成了一个二分图完美匹配的问题。现要得到字典序最小,那么就枚举每一位要放什么,然后看放完这种字符,剩下的字符的个数和后面能不能形成完美匹配。根据霍尔定理,选择 $X$ 中的一个子集 $s$,和 $Y$ 连边的点集为 $N(s) 阅读全文
摘要:
数据小的话就暴力跑网络流就好了。 但是这里是 $10^5$ 就不行了。现在枚举 {$a_i$} 中一段长为 $m$ 的连续子序列,考虑和 {$b_i$} 中的完美匹配。根据Hall定理,一个二分图,分为 $X$ 和 $Y$,存在完美匹配的充要条件为任取 $X$ 中一个子集 $s$,$Y$ 中与 $s 阅读全文
摘要:
A. Antipalindrome 直接暴力判断就行了。 #include <bits/stdc++.h> using namespace std; const int N = 100; char s[N]; bool check(int i, int j) { while (i <= j) { i 阅读全文
摘要:
tourist's contest...ssfd A - Move and Win 想不到好的博弈方法,我就直接暴力了...可以确定的是,如果一个人觉得他走这个方向是最优的,那么他肯定会一直走下去。那么就枚举四种情况,第一个人往左(往右),第二个人往左(往右)。当第一个人往左(或往右)时,另一个人怎 阅读全文
摘要:
假设现在有一堆数,我想要保证能取出一个,至少需要敲 (数的个数)*(这些数里的最小值)那么把这些数从大到小排序,$dp[i][j]$ 表示前 $i$ 个里面保证能取出 $j$ 个需要敲的次数。$dp[i][k] = min(dp[j][k - 1] + (i - j) \times a[i])$斜率 阅读全文
摘要:
费用流。把每个方格拆成 $T$ 个点,$t$ 时刻一个方格向周围四个方格的 $t + 1$ 的点连一条容量为 $1$ 费用为 $0$ 的边,向自身的 $t + 1$ 连一条容量为 $1$ 费用为该方格最大幸福值的边。源点向方格为 'S' 的0时刻连一条容量为 $1$ 费用为 $0$ 的边。所有点的 阅读全文
摘要:
感觉题目都已经快把正解给说出来了...strongly connected的两个点的消耗为0,其实就是同一个边双连通分量里面的点消耗为0。然后缩一下点,再树形DP一下就完了。第一次写边双,但感觉挺简单的。 #include <bits/stdc++.h> #define ll long long u 阅读全文
摘要:
对于一对 $(x, y)$,能成为逆序对的取决于绝对值大的那个数的符号。假如 $a[x] > a[y]$,当 $a[x]$ 为正时,不管 $a[y]$ 取不取负号都比 $a[x]$ 小。当 $a[x]$ 为负时, 不管 $a[y]$ 取不取负号都比 $a[x]$ 大。那么就变成了统计每个节点的子树及 阅读全文
摘要:
A. Kefa and First Steps 求最长递增连续子序列。 B. Kefa and Company 排序二分就行了。 #include <bits/stdc++.h> #define ll long long using namespace std; const int N = 1e5 阅读全文
摘要:
A. Raising Bacteria 数二进制位有多少个1就好了。 B. Finding Team Member 题意:有 $2n$ 个人,任意两个人配对有一个价值,如果一人的目前的最优配对那个人的最优配对也是自己,那么两个人可以配对。 思路:直接模拟,每次至少能让两个人配对成功。所以复杂度 $O 阅读全文
摘要:
[传送门] 设最后 $m$ 段每段数字之和为 $a_i$,那么最后答案为 $m^2 \sum \dfrac {\left( a_{i}-\dfrac {s}{m}\right) ^{2}}{m}$把括号拆开后最后答案为 $m\sum a_i ^{2}-S^{2}$要求最小化$\sum a_i ^{2 阅读全文
摘要:
[传送门] 感觉这种信息不符合区间可加性,或者用来区间相加的时间复杂度太高的话就直接分块。res[i][j] 表示第 $i$ 块到第 $j$ 块之间的答案,查询就先查询整块,再对两端暴力。注意不要用memset清空cnt数组,每次使用了再循环一遍撤销操作就行了。 #include <bits/std 阅读全文
摘要:
[传送门] 一个单调不减的序列,如果在每个位置取的数都加上对应位置的值,这样就是严格单调递增的了。如果 [1, 1, 2, 2, 3]就会变成 [2, 3, 5, 6, 8]就相当于在某个值域里取一些不重复的数了,具体这个值域就是[L + 1 , R + n]。但其实此时跟值域具体的值无关了,只跟值 阅读全文
摘要:
[传送门] 如果只有单组询问就是水题。多组询问就不能直接在线做了。考虑离线。 点分治,把当前重心到未被处理过的子树的距离放进一个数组,按距离从小到大排序。排完序后把这些节点替换成当前前缀权值最大的节点。因为如果到这个节点的距离为$r$,那么小于$r$的也能到达,所以取前缀max没有错。 然后对询问的 阅读全文
摘要:
[传送门] 题目即求所有的三元组,相对大小关系同 $p_1,p_2,p_3$。 题解说都很清楚,这里写一下过程整理一下思路。 如果我们枚举中间这个元素,那么就是统计子树内外有多少个大于这个数和小于这个数的个数。 假设$a_1$,$a_3$的$LCA$不是$a_2$,那么就是一个在$a_2$子树内一个 阅读全文
摘要:
A 同联盟的朋友连一条权值为$0$的边,不同联盟的朋友连一条权值为$1$的边,即可以把每一次换联盟看成走一条权值为1的边。那么以每一个人为起点的话终点就是这个人到其他所有人中最短路的最大值。求这些最大值的最小值即可。 #include <bits/stdc++.h> using namespace 阅读全文
摘要:
转化一下询问即为区间$max - min + 1 = cnt$,其中$cnt$表示区间内数的种类数。 即求有多少区间$max - min - cnt=-1$,注意到任意区间的$max-min-cnt \geq -1$,那么即维护区间$max-min-cnt$的最小值和最小值的个数,再看最小值等不等于 阅读全文
摘要:
[传送门] 这种区间内相同数字只能被统计一次/只有区间内数字都不相同才对答案有贡献的题都可以用扫描线扫右端点,表示当前区间右端点为$r$。然后当前线段树/树状数组维护区间左端点为$[1,r)$时对应的答案,那么新加一个数对区间$[last[a[r] + 1, r]$多了$a[r]$的贡献。这道题也一 阅读全文
摘要:
题意是,有$n$个石头,每个石头有初始能量$E_i$,每秒能量增长$L_i$,以及能量上限$C_i$,有$m$个收能量的时间点,每次把区间$\left[S_i, T_i\right]$石头的能量都给收掉,石头的能量都置零重新开始增长。问最后收了多少能量。 看完题解觉得好有道理...我好菜...考虑每 阅读全文
摘要:
[传送门] 题意就是单点加以及查询下标为等差数列位置上的值之和。刚开始看到这道题。我以为一个数的倍数是log级别的。就直接写了发暴力。就T了。还在想为啥,优化了几发才发现不太对劲。然后才想到是$\dfrac {n}{x}$级别的。不过看到$\dfrac {n}{x}$应该就出来了。当$x \leq 阅读全文