摘要:
暂且不说知识储备问题,就我的常见错误给个总结: 1、数组看情况计算着开,也不能盲目的开大,顶着范围开也有一定概率会挂。 2、有些算法不会计算时间复杂度,我经常因为不确定时间复杂度(经常是因为$O(玄学)$的dfs之类的算法)能否通过题目而一直卡在一道题上。 3、注意题目的特性,善于找性质,不要总是想 阅读全文
摘要:
A.Median Maximization 比较简单显而易见的贪心,显然前$\lfloor\frac{m-1}{2} \rfloor$数是$0$,后面的数尽可能平均分。 #include<cstdio> #include<algorithm> #include<iostream> #include< 阅读全文
摘要:
"LOJ" 这个题目挺有意思的,参考了一下题解写的。 设$fir[i]$表示颜色$i$第一次出现的位置,$ed[i]$表示颜色$i$最后一次出现的位置。 首先肯定可以转化为求区间$[l,r]$使得$fir[i]\geq l, ed[i]\leq r,i\in [l,r]$的个数 然后可以考虑枚举其中 阅读全文
摘要:
"LOJ" 显然可以想到二分答案。现在考虑如何$check$ 容易发现,假设考虑完前$i 1$个位置,对于位置$i$,我们肯定需要选择经过它的右端点尽量大的区间。 这就可以用一个堆来维护一下。 然后我们还需要知道每个位置被覆盖了多少次。这就再写颗线段树就行了。 代码: 阅读全文
摘要:
题意简述:给你一颗$n$个点的树,问你至少需要加几条边,可以使得这棵树删去任意一条边后依然联通。并给出一种方案。 很显然可以转化为对于树的任意一颗子树,都需要连一条边到其他子树,显然连叶子节点是最优的。 考虑这样一种连边方案:设一共$k$个叶子节点,按$dfs$序排序,第$i$个叶子节点连向第$i+ 阅读全文
摘要:
"LOJ" 我们发现假如第一步选择位置$i$,那么系统操作者能把$\rm Byteasar$限制成经过$i$的长度为$\lceil \frac{n}{2} \rceil$的任意一个序列。那么系统操作者肯定会选择价值最小的那个。 现在问题就是求出经过每个位置的长度为$\lceil \frac{n}{2 阅读全文
摘要:
"LOj" 显然题目可以转化为一个二分图。 先找一下是否存在度数为$0$的点,存在则无解、 然后把度数为$1$的点拎出来,这些点的选择是唯一的。 这些可以用拓扑排序处理一下。 接下来就剩下了一堆环。 然后因为不能选择相邻的边,一个环内有两种选法,设为$A$和$B$。 考虑先选出和比较小的那个,假设是 阅读全文
摘要:
"LOJ" ~~好简单的题。~~ 对美味度排序,然后价格为下标建立主席树,查询时二分就行了 代码: 阅读全文
摘要:
"codeforces" 一般的套路显然转化按位确定 第一行直接算有多少字典序比他小就行了。 对于$2$到$n$行,每行的总方案数就是错排数量。 这就存在一个问题,我们无法确定当前行能放的有多少字典序比它小。 我们发现对于第$i$行第$j$个,假如第$i 1$行前$j$个数和第$i$行前$j$个数一 阅读全文
摘要:
"atcoder" ~~一道小清新dp题~~ 我们设$f[i][j]$表示当前放了$i$个白球和$j$种其他颜色的球$(j include include include using namespace std; define rg register void read(int &x){ char 阅读全文
摘要:
"codeforces" 由于每个数组可以滑动。 我们对于一个位置,要考虑它是否可以为空,能放的最大值是多少。 每行的每个位置都直接这样做显然会TLE。 我们发现每行可以分为三个部分(有些时候不可以,随便讨论一下啦) 第一个部分是只能放前几个。 第二个部分是所有的都可以放。 第三个部分是只能放后几个 阅读全文